Thread.sleep() setIcon() no funcionan bien
hola a todos quisiera me ayudaran con un pequeño problemita
tengo dos botones en un jframe y cunado doy click en uno quiero mostrar una imagen luego esperar un poco y luego mostrar otra imagen alli les paso el codigo del ejemplo
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.ImageIcon;
public class ramdom extends JFrame {
private javax.swing.JPanel jContentPane = null;
private JTextField jTextField = null;
private JButton jButton_evento = null;
private JButton jButton_Imagen = null;
public ramdom() {
super();
initialize();
}
private void initialize() {
this.setSize(300,200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private javax.swing.JPanel getJContentPane() {
if(jContentPane == null) {
jContentPane = new javax.swing.JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJTextField(), null);
jContentPane.add(getJButton_evento(), null);
jContentPane.add(getJButton_Imagen(), null);
}
return jContentPane;
}
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setBounds(18, 19, 235, 23);
}
return jTextField;
}
private JButton getJButton_evento() {
if (jButton_evento == null) {
jButton_evento = new JButton();
jButton_evento.setBounds(134, 56, 88, 92);
jButton_evento.setText("click");
jButton_evento.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
jButton_Imagen.setIcon(new ImageIcon("imagen.gif"));
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
jButton_Imagen.setIcon(new ImageIcon("imagen2.gif"));
}
});
}
return jButton_evento;
}
private JButton getJButton_Imagen() {
if (jButton_Imagen == null) {
jButton_Imagen = new JButton();
jButton_Imagen.setBounds(21, 59, 90, 87);
}
return jButton_Imagen;
}
}
tengo dos botones en un jframe y cunado doy click en uno quiero mostrar una imagen luego esperar un poco y luego mostrar otra imagen alli les paso el codigo del ejemplo
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.ImageIcon;
public class ramdom extends JFrame {
private javax.swing.JPanel jContentPane = null;
private JTextField jTextField = null;
private JButton jButton_evento = null;
private JButton jButton_Imagen = null;
public ramdom() {
super();
initialize();
}
private void initialize() {
this.setSize(300,200);
this.setContentPane(getJContentPane());
this.setTitle("JFrame");
}
private javax.swing.JPanel getJContentPane() {
if(jContentPane == null) {
jContentPane = new javax.swing.JPanel();
jContentPane.setLayout(null);
jContentPane.add(getJTextField(), null);
jContentPane.add(getJButton_evento(), null);
jContentPane.add(getJButton_Imagen(), null);
}
return jContentPane;
}
private JTextField getJTextField() {
if (jTextField == null) {
jTextField = new JTextField();
jTextField.setBounds(18, 19, 235, 23);
}
return jTextField;
}
private JButton getJButton_evento() {
if (jButton_evento == null) {
jButton_evento = new JButton();
jButton_evento.setBounds(134, 56, 88, 92);
jButton_evento.setText("click");
jButton_evento.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
jButton_Imagen.setIcon(new ImageIcon("imagen.gif"));
try {
Thread.currentThread().sleep(1000);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
jButton_Imagen.setIcon(new ImageIcon("imagen2.gif"));
}
});
}
return jButton_evento;
}
private JButton getJButton_Imagen() {
if (jButton_Imagen == null) {
jButton_Imagen = new JButton();
jButton_Imagen.setBounds(21, 59, 90, 87);
}
return jButton_Imagen;
}
}
Hola:
El código del actionListener del botón java lo ejecuta en el hilo de eventos y refresco de pantalla (hilo de awt). Mientras no salgas de ese trozo de código, java no repinta las ventanas.
Si en ese trozo de código pones un icon, duermes un rato y pones otro icon, java no repinta nada porque tú tienes durmiendo su hilo. El primer icono no se verá, mientras mueves la ventana se quedará gris y cuando termines de dormir y pintes el segundo icono, entonces se repintará todo y verás únicamente el último icono.
Para que te funcione, debes pintar el primer icono, lanzar un nuevo hilo con el retardo y pintado del segundo icono y salir inmediatamente.
Puede ser algo como esto
poner primer icono
Thread hilo = new Thread (new Runnable()
{
public void run()
{
Thread.sleep(...);
poner segundo icono
}
}
hilo.start();
Se bueno
El código del actionListener del botón java lo ejecuta en el hilo de eventos y refresco de pantalla (hilo de awt). Mientras no salgas de ese trozo de código, java no repinta las ventanas.
Si en ese trozo de código pones un icon, duermes un rato y pones otro icon, java no repinta nada porque tú tienes durmiendo su hilo. El primer icono no se verá, mientras mueves la ventana se quedará gris y cuando termines de dormir y pintes el segundo icono, entonces se repintará todo y verás únicamente el último icono.
Para que te funcione, debes pintar el primer icono, lanzar un nuevo hilo con el retardo y pintado del segundo icono y salir inmediatamente.
Puede ser algo como esto
poner primer icono
Thread hilo = new Thread (new Runnable()
{
public void run()
{
Thread.sleep(...);
poner segundo icono
}
}
hilo.start();
Se bueno
hola, saben estoy tratando de hacer un programa, en el que quiero que al presionar un boton me muestre un formulario y despues de cierto tiempo se cierre y muestre otro formulario ya que el primer formulario solo es una bienvenida, lo estoy haciendo con hilos pero, solo logro hacer se muestre la primera forma pero lo hace despues del tiempo que le especifico, y yo quiero que se quede abierta durante el tiempo que le especifico
try{
forma1.setVisible(true);
Thread.sleep(5000);
forma1.setVisible(false);
dispose();
forma2.setVisible(true);
}
catch(Exeption ex){
System.out.println(\"interrupcion\");
}
este es el codigo que le implemento al actionlistener de mi boton pero no me executa la primera linea del try, me pueden ayudar, please!!!!!!!
try{
forma1.setVisible(true);
Thread.sleep(5000);
forma1.setVisible(false);
dispose();
forma2.setVisible(true);
}
catch(Exeption ex){
System.out.println(\"interrupcion\");
}
este es el codigo que le implemento al actionlistener de mi boton pero no me executa la primera linea del try, me pueden ayudar, please!!!!!!!