Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > hacer pausa

Hola, estoy queriendo hacer una pausa en la ejecución de mi programa. Tengo un JLabel vacio dentro de un JFrame y quiero mostrar en el JLabel una imagen por unos segundos y luego cambiarla por otra imagen.
He puesto el siguiente codigo en el metodo o evento windowOpened del JFrame pero no esta funcionando:

//muestro la primera imagen
imagen_lbl.setIcon(new javax.swing.ImageIcon(getClass().getResource("/misClases/imagenes/catalogo-a.png")));

//Hago la pausa de 3 segundo
try{
Thread.sleep(3000);
}catch(InterruptedException e ) {
}

//Muestro la otra imagen
imagen_lbl.setIcon(new javax.swing.ImageIcon(getClass().getResource("/misClases/imagenes/catalogo-b.png")));

Al ejecutar el programa, el JFrame se abre sin mostrar nada y luego de la pausa se muestra solo la segunda imagen. No muestra la primera imagen, ni hacer la pausa en el momento indicado y solo muestra la segunda imagen.

Desde ya muchas gracias por cualquier tipo de ayuda que me puedan dar para resolver mi problema y también agradezco todas la ayudas provista en el foro.

mayo 9, 2017 | Registered Commenterelprofera2014

No puedes hacerlo así, porque el método se ejecuta dentro del EDT, con lo que esa pausa detiene el mismo EDT, y por lo tanto la ejecución del método, con lo que finalmente solo se "ve" el último cambio de imagen.
Ten en cuenta que los eventos de Swing se deben ejecutar hasta el final, para poder ver actualizaciones visuales.

Podrías usar un Scheduler:
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html
y actualizar el JLabel en el instante que desees usando un invokeLater:
https://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
para que el setIcon se ejecute dentro del EDT.

mayo 10, 2017 | Registered Commenterchoces