为什么需要将GUI更新代码放入SwingUtilities.invokeLater()?为什么它不能被Swing本身内部照顾?为什么调用者必须关心swing如何处理UI更新?
3 回答
守着星空守着你
TA贡献1799条经验 获得超8个赞
Swing是单线程的。UI的每次更新都必须来自所谓的EDT - 事件 - 调度线程,它是Swing(我认为AWT)使用的主要GUI线程。如果你不这样做,那么可能会或将要发生奇怪的事情(虽然我更喜欢Windows FOrms,如果你做错了就会抛出异常)。
话虽这么说,你不需要将每个UI操作包装成SwingUtilities.invokeLater()- 如果你正在编写的代码已经由EDT执行,则不需要。所以ActionListener点击按钮不需要这个。但是一个外部对象的监听器,在其他一些线程中运行,在JLabel某个地方更新- 你需要它。
添加回答
举报
0/150
提交
取消