Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Problema con un bucle en boton con java

Buenas a todos, estoy programando una pequeña aplicacion que debe mostrarme una animacion de stopmotion, Usando 16 imagenes mostradas por segundo. Pero al reproducirla se bloquea el programa y no muestra ninguna imagen, ademas no puedo manipular los demas componentes de la ventana. Debo cerrarla cancelando el proceso, ¿que debo hacer?

public void actionPerformed(ActionEvent arg0) {

AnimationControl = true; //Controla la reproduccion

if(SelectAnimation.getSelectedItem() == "Jinete Montando Caballo") { // Si la animacion Seleccionada es jinete montando caballo (16 Frames)

String Path1 = "/ImagenesCaballo/Frame1.jpg" ;
java.net.URL ImageDirection = this.getClass().getResource(Path1); // Lee la imagen 1
ImageIcon Frame1 = new ImageIcon(ImageDirection);

String Path2 = "/ImagenesCaballo/Frame2.jpg" ;
java.net.URL ImageDirection2 = this.getClass().getResource(Path2); // Lee la imagen 2
ImageIcon Frame2 = new ImageIcon(ImageDirection2);

String Path3 = "/ImagenesCaballo/Frame3.jpg" ;
java.net.URL ImageDirection3 = this.getClass().getResource(Path3); // Lee la imagen 3
ImageIcon Frame3 = new ImageIcon(ImageDirection3);

String Path4 = "/ImagenesCaballo/Frame4.jpg" ;
java.net.URL ImageDirection4 = this.getClass().getResource(Path4); // Lee la imagen 4
ImageIcon Frame4 = new ImageIcon(ImageDirection4);

while(AnimationControl) { // Bucle Que establece cada frame por sgundo

Cuadro.setIcon(Frame1); // Establece Frame 1

try {
Thread.sleep(1000);
} catch (InterruptedException e) { //Espera 1 Segundo

e.printStackTrace();
}

Cuadro.setIcon(Frame2);// Establece Frame 2

try {
Thread.sleep(1000);
} catch (InterruptedException e) { //Espera 1 Segundo

e.printStackTrace();
}

Cuadro.setIcon(Frame3); // Establece Frame 3

try {
Thread.sleep(1000);
} catch (InterruptedException e) { //Espera 1 Segundo

e.printStackTrace();
}

Cuadro.setIcon(Frame4); //Establece Frame 4

try {
Thread.sleep(1000);
} catch (InterruptedException e) { //Espera 1 Segundo

e.printStackTrace();
}

}
}
}

marzo 25, 2018 | Registered Commenterjenselstiven

Los listeners deben ejecutarse a toda velocidad, con la menor cantidad y complejidad de código que sea posible.

La práctica totalidad de tu código debería ejecutarse usando SwingWorker:

https://docs.oracle.com/javase/9/docs/api/javax/swing/SwingWorker.html
https://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html

marzo 26, 2018 | Registered Commenterchoces