Disculpen lo que sucede es que tengo un código que me dejaron de trabajo para una calificada, alli usan Netbeans 6.9 en Linux (Scientific Linux), yo uso Netbeans 6.9.1 en Windows, termine mi codigo y funciona en Windows, pero en mi Facultad no funciona, acabo de instalar Ubuntu en mi pc y tampoco funciona, y he comprobado otro Windows y si funciona, ¿que tengo que cambiar en el codigo? pensaba que en Windows y Linux era lo mismo por usar Netbeans. Este es mi codigo:
import java.util.*;
import javax.swing.JOptionPane;
import java.applet.*;
import javax.swing.JApplet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Main extends JApplet implements Runnable,KeyListener{
Thread anima;
int radio=10; //radio de bala
int x, y; //posición de bala para grafica
int x0 = 20; //pos inicial
int y0 = 20;
int vx0 = 20; //vel inicial
int vy0 = 20;
double g=0.05; //Gravedad
int anchoApplet;
int altoApplet;
int retardo=10; //retardo
int res; //restitucion de bala
int friccion; //friccion
String Listener;
String Listen=" presione 'P' o 'V'";//muestra la seleccion
LinkedList<Bala> ListaBalas=new LinkedList<Bala>(); //Lista de balas
Image imag; //imagen donde se carga una foto de un instante
Graphics gg; //bufffer Graphics para cargar la imagen imag
public void init () {
setSize(400,400);//dimensiones del applet
anchoApplet=getSize().width;
altoApplet=getSize().height;
addKeyListener( this );//ESTE ES EL PROBLEMA PARECE NO FUNCIONA EN LINUX
res=Integer.parseInt(JOptionPane.showInputDialog(" Ingrese restitucion (0-100)"));
friccion=Integer.parseInt(JOptionPane.showInputDia log("Ingrese friccion (0-100)"));
}
public void paint(Graphics g){
imag=createImage(anchoApplet, altoApplet);
gg=imag.getGraphics();
gg.setColor(Color.black);
gg.drawOval(x0, y0, 2*radio, 2*radio);//posicion
gg.drawLine(x0+radio, y0+radio, x0+vx0+radio, y0+vy0+radio);//velocidad
gg.setColor(Color.blue);
gg.drawString("X0="+x0+" Y0="+y0+" Vx="+vx0+" Vy="+vy0+Listen,5, 15);//datos
gg.setColor(Color.red);
int ix=ListaBalas.size();
if(ix!=0){//grafica todas las balas
for (int ii=0;ii<=ix-1;ii++){
gg.fillOval((int)ListaBalas.get(ii).getpx()-radio,(int)ListaBalas.get(ii).getpy()-radio, 2*radio, 2*radio);
}
}
g.drawImage(imag, 0, 0, null);
}
public void start(){
if(anima ==null){
anima=new Thread(this);
anima.start();
}
}
public void run() {
long t=System.currentTimeMillis();
while (true) {
mueveBalas();
try{
t+=retardo;
Thread.sleep(Math.max(0, t-System.currentTimeMillis()));
}catch(InterruptedException ex){
break;
}
}
}
public void startBall(){
Bala b=new Bala();
b.setBala(x0+radio, y0+radio, vx0, vy0, radio);
ListaBalas.addFirst(b);
}
void mueveBalas(){
int i=ListaBalas.size();
//System.out.println(i);
if(i!=0){
for(int jj=0; jj<=i-1;jj++){
for (int ii=jj+1;ii<=i-1;ii++){
pruebaChoque(ListaBalas.get(ii),ListaBalas.get(jj) );
}
}
}
if(i!=0){
for (int ii=0;ii<=i-1;ii++){
moverBala(ListaBalas.get(ii));
if(ListaBalas.get(ii).getInactividad()>4){
ListaBalas.remove(ii);
i--;
ii--;
}
}
}
repaint();
}
void moverBala(Bala b) {
double vy;
double vx;
double xx;
double yy;
vy=b.getvy();//se obtiene los datos de la bala
vx=b.getvx();
xx=b.getpx();
yy=b.getpy();
if(((int)vx==0)&&((int)vy==0)&&((int)yy==(altoAppl et-radio))){
int Inac=b.getInactividad();
Inac++;//aplicamos conteo de inactividad
b.changeInactividad(Inac);
}
vy=vy+g;
if((Math.abs(vy)<1)&&(yy>=(altoApplet-radio))){
vx=vx*(100-friccion)/100;
}
//vx=(vx*(10000-friccion))/10000;
//vy=(vy*(10000-friccion))/10000;
xx=xx+vx;
yy=yy+vy+g/2;
x = (int)(xx);
y = (int)(yy);
if (Math.abs(vx)<0.007){vx=0;}//detiene la pelota
if (xx > (anchoApplet-radio) || xx < radio) {
vx+=(-2*(vx*(100+res))/200);
if((xx>(anchoApplet-radio))){
xx=(anchoApplet-radio);
}
if(xx<radio){
xx=radio;
}
}
if (yy > (altoApplet-radio) || yy < radio) {
vy+=(-2*(vy*(100+res))/200);//
if((vy<1)&&(yy>(altoApplet-radio))){
yy=(altoApplet-radio);
}
if(yy<radio){
yy=radio;
}
}
b.changePos(xx, yy);
b.changeVel(vx, vy);
}
public void pruebaChoque(Bala bala2,Bala bala1){
double x1,x2,y1,y2;
x1=bala1.getpx();
y1=bala1.getpy();
x2=bala2.getpx();
y2=bala2.getpy();
if((Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)))<(2*radio)){
double k,Vux,Vuy,V1px,V1py,V2px,V2py,V1ux,V1uy,V2ux,V2uy, Vcx,Vcy;//Vu: vector distancia
Vux=x1-x2;//componente del vector distancia x
Vuy=y1-y2;//componente del vector distancia y
k=(bala1.getvx()*Vux+bala1.getvy()*Vuy)/(Vux*Vux+Vuy*Vuy);//K constante de transformacion
V1ux=k*Vux;//componente x de V1 paralelo a Vu
V1uy=k*Vuy;//componente y de V1 paralelo a Vu
V1px=bala1.getvx()-V1ux;
V1py=bala1.getvy()-V1uy;
k=(bala2.getvx()*Vux+bala2.getvy()*Vuy)/(Vux*Vux+Vuy*Vuy);//K constante de transformacion
V2ux=k*Vux;//componente x de V1 paralelo a Vu
V2uy=k*Vuy;//componente y de V1 paralelo a Vu
V2px=bala2.getvx()-V2ux;
V2py=bala2.getvy()-V2uy;
Vcx=V1ux;//Vcx y Vcy hacen posible el cambio
Vcy=V1uy;
V1ux=V2ux;
V1uy=V2uy;
V2ux=Vcx;
V2uy=Vcy;
V2ux=V2ux*(100+res)/200;//Choque hace que sea mas lento
V2uy=V2uy*(100+res)/200;
V1ux=V1ux*(100+res)/200;
V1uy=V1uy*(100+res)/200;
bala1.changeVel(V1ux+V1px,V1uy+V1py);
bala2.changeVel(V2ux+V2px,V2uy+V2py);
}
}
public void keyPressed( KeyEvent LPres )
{
switch (LPres.getKeyCode()){
case KeyEvent.VK_LEFT:
if(Listener=="v"){
vx0--;
}
if(Listener=="p"){
x0--;
}
break;
case KeyEvent.VK_RIGHT:
if(Listener=="v"){
vx0++;
}
if(Listener=="p"){
x0++;
}
break;
case KeyEvent.VK_UP:
if(Listener=="v"){
vy0--;
}
if(Listener=="p"){
y0--;
}
break;
case KeyEvent.VK_DOWN:
if(Listener=="v"){
vy0++;
}
if(Listener=="p"){
y0++;
}
break;
}
}
public void keyReleased( KeyEvent LPres )//ESTO NO FUNCIONA EN LINUX
{
switch (LPres.getKeyCode()){
case KeyEvent.VK_V:
Listener="v";
Listen=" Velocidad seleccionado";
break;
case KeyEvent.VK_P:
Listener="p";
Listen=" Posicion seleccionado";
break;
case KeyEvent.VK_LEFT:
if(Listener=="v"){
vx0--;
}
if(Listener=="p"){
x0--;
}
break;
case KeyEvent.VK_RIGHT:
if(Listener=="v"){
vx0++;
}
if(Listener=="p"){
x0++;
}
break;
case KeyEvent.VK_UP:
if(Listener=="v"){
vy0--;
}
if(Listener=="p"){
y0--;
}
break;
case KeyEvent.VK_DOWN:
if(Listener=="v"){
vy0++;
}
if(Listener=="p"){
y0++;
}
break;
case KeyEvent.VK_SPACE:
startBall();
break;
}
}
public void keyTyped( KeyEvent LPres )
{
}
}
***
Manejamos con las flechas y las letras P y V (posicion y velocidad) las esferas chocan entre si (a veces las esferas se juntan y no se chocan pero eso no es el problema), tambien tengo la clase objeto Bala si lo necesitan me dicen, el problema del profesor lo saco de un examen del internet [URL="http://www.bamtanggames.com/exams/cpp/exam_es.htm"]http://www.bamtanggames.com/exams/cpp/exam_es.htm[/URL]
es la numero 7, gracias desde ya por la atencion.