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

为什么需要将GUI更新代码放入SwingUtilities.invokeLater()

为什么它不能被Swing本身内部照顾?为什么调用者必须关心swing如何处理UI更新?


桃花长相依
浏览 2238回答 3
3回答

守着星空守着你

Swing是单线程的。UI的每次更新都必须来自所谓的EDT - 事件 - 调度线程,它是Swing(我认为AWT)使用的主要GUI线程。如果你不这样做,那么可能会或将要发生奇怪的事情(虽然我更喜欢Windows FOrms,如果你做错了就会抛出异常)。话虽这么说,你不需要将每个UI操作包装成SwingUtilities.invokeLater()- 如果你正在编写的代码已经由EDT执行,则不需要。所以ActionListener点击按钮不需要这个。但是一个外部对象的监听器,在其他一些线程中运行,在JLabel某个地方更新- 你需要它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java