首先,我想说我知道这种方法是错误的,所以我问这个问题纯粹是出于好奇。假设我有一个像这样的摇摆应用程序:
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();
}
});
}
}
基本上,当我单击一个Load
按钮时,我希望该Tulips.jpg
图像显示,然后 GUI 冻结 2 秒,然后我希望该Koala.jpg
图像显示。但是会发生什么:我单击按钮,GUI 冻结 2 秒并Koala.jpg
显示。Tulips.jpg
在此之前没有。但让我感到困惑的是,当我把那些System.out.println("Tulips painted");
和System.out.println("Koala painted");
. 所以当我点击按钮时,它会打印“郁金香画”,2秒后“考拉画”。有人可以告诉我这里发生了什么吗?问候。