java - Swing 窗口的初始化方式有什么区别?

标签 java swing jframe

我很好奇以下创建 Swing 窗口的方法之间的差异:

  1. 在 main() 中使用 java.awt.EventQueue.invokeLater();
  2. 在 main() 中使用 SwingUtilities.invokeLater();
  3. 根本不关心线程,只需实例化 JFrame 子类并从 main 调用 setVisible(true) ,而不将其包装在 Runnable 中;无论如何,这似乎有效。

谢谢。

最佳答案

关于线程要记住的一点是“似乎有效”与“在所有情况下都明显有效”不同。

基本规则是您不应该在事件线程之外创建 Swing/操作组件,并且应用程序的主线程位于“事件线程之外”。因此,在应用程序启动代码中,您应该在invokeLater() 中创建主窗口。

如果您使用 Swing 进行编程,我会使用 invokeLater() 的 SwingUtilities 版本。尽管我认为在当前的实现中,功能上一个只是调用另一个,但我想这在未来可能会改变。

关于java - Swing 窗口的初始化方式有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1575734/

相关文章:

java - 如何设置JTable的宽度

java - 使用另一个 jPanel 上的按钮修改 jPanel

java JFrame更新修改了另一个JFrame

java - Spring mvc web.xml错误

java - 如何从它本身(也是主类)更新GUI?

java - 响应式(Reactive)编程的优点/缺点

java - Java中的关闭窗口事件

swing - 如何在 JFrame TitleBar 中添加任何组件

java - 如何从 jython 的 url 中删除 .py

java - LibVlc 是跨平台的吗?