我很好奇以下创建 Swing 窗口的方法之间的差异:
- 在 main() 中使用 java.awt.EventQueue.invokeLater();
- 在 main() 中使用 SwingUtilities.invokeLater();
- 根本不关心线程,只需实例化 JFrame 子类并从 main 调用 setVisible(true) ,而不将其包装在 Runnable 中;无论如何,这似乎有效。
谢谢。
最佳答案
关于线程要记住的一点是“似乎有效”与“在所有情况下都明显有效”不同。
基本规则是您不应该在事件线程之外创建 Swing/操作组件,并且应用程序的主线程位于“事件线程之外”。因此,在应用程序启动代码中,您应该在invokeLater() 中创建主窗口。
如果您使用 Swing 进行编程,我会使用 invokeLater() 的 SwingUtilities 版本。尽管我认为在当前的实现中,功能上一个只是调用另一个,但我想这在未来可能会改变。
关于java - Swing 窗口的初始化方式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1575734/