Thread sleep dentro do método actionPerformed
Primeiro de tudo, quero dizer que estou ciente de que essa abordagem está errada, então estou fazendo essa pergunta por causa da pura curiosidade. Vamos dizer que eu tenho um aplicativo de swing como este:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ThreadSleeping {
JFrame frame = new JFrame();
JPanel panel = new JPanel();
JButton button = new JButton("Load");
JLabel label = new JLabel();
public ThreadSleeping() {
panel.add(button);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
label.setIcon(new ImageIcon(
"C:/Users/Public/Pictures/Sample Pictures/Tulips.jpg"));
System.out.println("Tulips painted");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
label.setIcon(new ImageIcon(
"C:/Users/Public/Pictures/Sample Pictures/Koala.jpg"));
System.out.println("Koala painted");
}
});
frame.add(panel, BorderLayout.NORTH);
frame.add(label, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setSize(1024, 768);
// frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ThreadSleeping();
}
});
}
}
Basicamente quando clico em umLoad
botão Espero queTulips.jpg
imagem exibe então GUI congela por um segundo e depois que eu espero queKoala.jpg
imagem é exibida. Mas o que acontece é que: clico no botão, a interface gráfica congela por 2 segundos eKoala.jpg
exibe. NãoTulips.jpg
antes disso. Mas coisa que me confunde é quando eu coloco essasSystem.out.println("Tulips painted");
eSystem.out.println("Koala painted");
. Então, quando eu clico no botão, ele imprime "Tulipas pintadas" e depois de 2 segundos "Koala pintado". Alguém pode me dizer o que está acontecendo aqui? Saudações.