Swing:不使用EDT创建GUI是否安全?

时间:2014-09-21 12:26:12

标签: java swing main event-dispatch-thread

在Oracle网站上阅读last paragraph

  

为什么初始线程不是简单地创建GUI本身?因为   几乎所有创建Swing组件或与Swing组件交互的代码都必须   在事件派发线程上运行。

所以main()不应该在初始线程中创建Swing JFrame,而应该使用SwingUtilities.invokeLater(),至少使用Java 7。这也在this Q/A)中解释。

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        createAndShowGUI();
    }
});

虽然这是非常符合逻辑的,但我们必须注意到这在教程中几乎从不完成。 我在其他地方读过,现代编译器会在不告诉程序员的情况下自己插入invokeLater()调用。这是真的吗,例如在使用Eclipse时?

是否有一些参考来确认此行为?是否有不同的案例需要考虑?

1 个答案:

答案 0 :(得分:1)

我认为这些示例不会使用invokeLater(),因为他们不想让示例复杂化(他们不想解释invokeLater(),至少在那一点)。

使用事件调度线程的问题仅适用于已经运行的UI的情况;这些示例主要是从头开始创建UI,因此在调用Swing内容时它不会运行,并且直到屏幕上实现某些内容,然后就不会担心用户生成的事件。我想,人们仍然可能会受到冲击,但他们几乎不得不尝试这样做。

所以我想从头开始创建UI是它自己的特殊情况。