まず第一に、私はこのアプローチが間違っていることを知っていると言いたいので、純粋な好奇心のためにこの質問をしています。私がこのようなswingアプリケーションを持っているとしましょう:
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秒後に「コアラペイント」と印刷されます。誰かがここで何が起こっているのか教えてもらえますか?よろしく。