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



阅读Oracle站点上的最后一段。

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

因此,main()不应该在初始线程中创建Swing JFrame,而应该使用SwingUtilities.invokeLater(),至少应该使用Java7。这也在本问答中进行了解释)。

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

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

有什么参考资料可以证实这种行为吗?是否有不同的案例需要考虑?

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

使用事件调度线程的问题仅适用于已经有UI运行的情况;这些示例大多是从头开始创建UI,因此在调用Swing时它不会运行,在屏幕上实现某些东西之前,就不需要担心用户生成的事件。我想,一个人仍然可以被冲洗,但他们几乎必须尝试这样做

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

最新更新