Hola, mi profe me dejo hacer un programa donde se le pida al usuario un dato de entrada y de acuerdo a ese dato generar "N" agentes (Hilos) y que cada agente aparezca de manera aleatoria en una ventana, después de que aparezcan, los agentes deberán de moverse de manera aleatoria ya sea arriba,abajo,izquierda, o derecha, mi problema esta en que a la hora de mandar a llamar la función mover solo 1 agente(Hilo) es el que se mueve los demás agentes se quedan estáticos, mis agentes los estoy imprimiendo en JLabel aquí les dejo el código a ver si alguien puede ayudarme a solucionar ese problema.
import java.util.Random;
import javax.swing.*; public class Ventana extends JFrame implements Runnable{ JLabel label1; public Ventana() { int cantidad=Integer.parseInt(JOptionPane.showInputDialog("Numero de agentes?: ")); Thread hilo[]= new Thread[cantidad]; for(int i=0;i<cantidad;i++) { hilo= new Thread(this); hilo.start(); } } public void agregalabel(int x1,int y1) { setLayout(null); label1=new JLabel("(*)"); label1.setBounds(x1,y1,x1,y1); add(label1); } public void mover(int x1,int y1) { int dec; while(true) { dec = (int)(Math.random()*3)+1; switch(dec) { case 1: System.out.println(dec); while(x1<getWidth()-30){ x1=x1+10; label1.setBounds(x1,y1,x1,y1); try { Thread.sleep(500); }catch(Exception e) { } } break; case 2: System.out.println(dec); while(x1>20){ x1=x1-10; label1.setBounds(x1,y1,x1,y1); try { Thread.sleep(500); }catch(Exception e) { } } break; case '3': System.out.println("3"); while(y1<getHeight()-30){ y1=y1+10; label1.setBounds(x1,y1,x1,y1); try { Thread.sleep(500); }catch(Exception e) { } } break; case '4': break; } } } public static void main(String[] ar) { Ventana formulario1=new Ventana(); formulario1.setBounds(0,0,1500,400); //formulario1.setExtendedState(JFrame.MAXIMIZED_BOTH); // formulario1.setSize(1300,600); formulario1.setResizable(true); formulario1.setVisible(true); } int x1,y1; @Override public void run() { try { x1= (int)(Math.random()*500)+300; y1= (int)(Math.random()*100)+301; agregalabel(x1,y1); mover(x1,y1); System.out.println("X: "+x1+"Y: "+y1); Thread.sleep(1000); }catch(Exception e) { } } }
|