Agentes Java

Iniciado por Luis Daniel, 28 Marzo 2018, 07:16 AM

0 Miembros y 1 Visitante están viendo este tema.

Luis Daniel

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) {
         
      }
      
      }
}


vitorini2003

Utiliza el método join () en vez de start.