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
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();
}
}
}
}