Problema con un bucle en un boton

Iniciado por JenselG, 25 Marzo 2018, 03:50 AM

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

JenselG

Buenas a todos, espero que esten bien. Estoy desarrollando un pequeño programa que debe mostrarme unas imagenes diferentes cada segundo en un jlabel al pulsar el boton reproducir (Corto de StopMotion), pero al pulsar reproducir se me bloquea la aplicacion, el boton y no me deja hacer nada mas, Para cerrar la app debo cerrar el proceso. ademas no me carga ni una sola imagen ni puedo presionar los demas botones. ¿que puedo hacer? Uso Eclipse Oxigen

Código (java) [Seleccionar]

         JButton Play = new JButton("Reproducir");
 Play.addActionListener(new ActionListener() {

 public void actionPerformed(ActionEvent arg0) {

AnimationControl = true;  // variable que controla la reproduccion

if(SelectAnimation.getSelectedItem() == "Jinete Montando Caballo") {

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

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

    while(AnimationControl) {  // bucle que muestra cada imagen por segundo

Cuadro.setIcon(Frame1);  //Establece imagen1
Cuadro.setIcon(Frame2);  //Establece imagen2 Sucesivamente 16 imagenes

try {

  Thread.sleep(1000);  // Espera 1 segundo por imagen

} catch (InterruptedException e) {

// TODO Bloque catch generado automáticamente

  e.printStackTrace();
}
}
}    
   

rub'n

Hola,

Muestra el log del error, llega a entrar al if? aunque si no cambia las imagenes  :rolleyes:


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

animanegra

Te pasa eso porque no estas dejando a la interfaz dibujar nada. No puedes hacer un proceso que se quede esperando con sleep en una accion porque dejas en estado de inanición al proceso de dibujado y atencion del resto de acciones de la aplicación.

Si deseas que cada cierto tiempo se cambie la imagen deberás de programarlo con un action listener asociado a un timer (el de awk o el de util). Y en cada click de reloj que haga un cambio a la siguiente imagen que deseas mostrar en tu interfaz.

Saludos.

42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.