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

SwingUtilities.invokeLater()为什么需要它?

SwingUtilities.invokeLater()为什么需要它?

桃花长相依 2019-09-02 17:09:24
为什么需要将GUI更新代码放入SwingUtilities.invokeLater()?为什么它不能被Swing本身内部照顾?为什么调用者必须关心swing如何处理UI更新?
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

Swing是单线程的。UI的每次更新都必须来自所谓的EDT - 事件 - 调度线程,它是Swing(我认为AWT)使用的主要GUI线程。如果你不这样做,那么可能会或将要发生奇怪的事情(虽然我更喜欢Windows FOrms,如果你做错了就会抛出异常)。


话虽这么说,你不需要将每个UI操作包装成SwingUtilities.invokeLater()- 如果你正在编写的代码已经由EDT执行,则不需要。所以ActionListener点击按钮不需要这个。但是一个外部对象的监听器,在其他一些线程中运行,在JLabel某个地方更新- 你需要它。


查看完整回答
反对 回复 2019-09-02
  • 3 回答
  • 0 关注
  • 2237 浏览

添加回答

举报

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