SwingUtilities.invokeLater() 为什么需要它?
为什么有必要将GUI更新代码放入?SwingUtilities.invokeLater()
为什么不能由Swing自己在内部照顾它?为什么调用方必须关心 swing 如何处理 UI 更新?
为什么有必要将GUI更新代码放入?SwingUtilities.invokeLater()
为什么不能由Swing自己在内部照顾它?为什么调用方必须关心 swing 如何处理 UI 更新?
摆动对象不是线程安全的。 顾名思义,允许在以后的某个时间点执行任务;但更重要的是,任务将在AWT事件调度线程上执行。使用 时,任务是异步执行的;还有 ,在任务完成执行之前不会返回。SwingUtilities.invokeLater()
invokeLater
invokeAndWait
有关决定不使 Swing 线程安全的决定的一些信息可以在这里找到:多线程工具包:一个失败的梦想? [存档]
因为 GUI 更新必须在事件调度线程中完成。如果在不同的线程中操作,则在 中执行更新会将其从线程中拉出并拖入事件线程。invokeLater
更多解释在这里: http://www.oracle.com/technetwork/java/painting-140037.html
在 Swing 上进行重大更新(例如从数据库中重新填充 JTable)的明智之举是获取基础模型,在线程中对模型进行更新,然后使用 发出通知。这样可以让你的gui对事件做出响应并重新绘制。如果更新将非常广泛,您甚至可以在更新时定期触发这些通知,例如每隔一两秒。invokeLater
invokeLater