为什么在不同的线程中实例化JFrame

时间:2019-04-28 07:48:22

标签: java swing awt

我不明白幕后到底发生了什么。

如果我有如下所示的main方法,是否表示我有2个线程? 一个主线程和一个线程来处理诸如paintComponent或listeners等事件? 如果是这样,那么在主线程中到底发生了什么?

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
        try {
            Ampelsteuerung frame = new Ampelsteuerung();
            frame.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
        }
    });
    }`

我删除了EventQueue并对其进行了测试,没有发现任何区别。

1 个答案:

答案 0 :(得分:0)

如果您阅读了SwingUtilities.invokeLater()的说明,那么您将会了解原因。一切都与AWT事件和GUI线程之间的同步有关

  

这将在处理所有未决的AWT事件之后发生。   当应用程序线程需要更新时,应使用此方法   GUI。...如果从事件分配线程(例如,从JButton的ActionListener)调用invokeLater,则doRun.run()仍将延迟,直到处理完所有未决事件为止

因此,如您的情况那样,如果不存在任何未决事件,似乎“什么也不会发生”。