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

问题描述 投票:1回答:1

我无法理解幕后发生了什么。

如果我有一个像下面这样的主要方法,是否意味着,我有2个线程?一个主线程和一个线程的事件,如paintComponent或听众等?如果是这样,主线程究竟发生了什么呢?

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并在没有测试的情况下,看不出任何差异。

java swing awt
1个回答
0
投票

如果您阅读了SwingUtilities.invokeLater()的描述,您就会明白原因。这都是关于AWT事件和GUI线程之间的同步

这将在处理完所有挂起的AWT事件后发生。当应用程序线程需要更新GUI时,应该使用此方法....如果从事件调度线程调用invokeLater - 例如,从JButton的ActionListener调用 - doRun.run()仍将延迟到所有已处理待处理事件

因此,如果在您的情况下不存在未决事件,则似乎“无”。

© www.soinside.com 2019 - 2024. All rights reserved.