为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在main方法中使用SwingUtilities.invokeLater?

为什么在main方法中使用SwingUtilities.invokeLater?

呼如林 2019-08-28 10:31:24
为什么在main方法中使用SwingUtilities.invokeLater?经过多年的Java编程,我总是习惯于创建main()这样的方法:public static void main(String[] args) {     runProgram();}但是最近我从Web上学习了一些代码并且有时看到这个代码而不是main()上面的常规用法:public static void main(String[] args) {     SwingUtilities.invokeLater(new Runnable()      {         public void run()          {             runProgram();         }     });}我只是想知道:为什么要使用这个而不是通常的main()方式?当我试一试时,我看不出有任何区别。这两种方式有什么区别?感谢您阅读我和您的答案。
查看完整描述

3 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

文档解释了原因。来自初始线程

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

并从事件派遣线程

一些Swing组件方法在API规范中标记为“线程安全”; 这些可以从任何线程安全地调用。必须从事件派发线程调用所有其他Swing组件方法。忽略此规则的程序可能在大多数情况下正常运行,但会遇到难以复制的不可预测的错误。


查看完整回答
反对 回复 2019-08-28
?
MM们

TA贡献1886条经验 获得超2个赞

因为VM启动的线程“main”不是事件派发线程


查看完整回答
反对 回复 2019-08-28
?
侃侃无极

TA贡献2051条经验 获得超10个赞

来自API的一些Swing组件不是线程安全的,这意味着它们可能会导致一些问题,比如死锁,所以最好通过使用Swing提供的Event调度程序线程创建和更新这样的swing组件,但不能从主线程或其他任何线程创建和更新从main创建的线程。


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 834 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信