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



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

如果我有一个像下面这样的主方法,这是否意味着我有 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();
        }
        }
    });
    }`

我删除了事件队列并对其进行了测试,没有看到任何区别。

如果你阅读了 SwingUtilities.invokeLater(( 的描述,你就会明白其中的原因。这一切都与 AWT 事件和 GUI 线程之间的同步有关

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

因此,如果不存在待处理事件,则"什么都不会发生",就像您的情况一样。

最新更新