哪个线程运行所有AWT / swing事件处理代码?

时间:2013-08-07 16:18:39

标签: java swing

我是java新手,并且有一个我不理解的研究生角色的面试问题,所以你能告诉我哪个主题及其目的。

2 个答案:

答案 0 :(得分:3)

Swing UI工具包是单线程的(从某种意义上说,从任何其他线程调用任何swing库是不安全的)。所有UI事件,包括呈现和调度它们都由EDT thread完成。

所以单击桌面上的按钮。操作系统向EDT发出通知,该通知接收事件,然后触发为按钮点击注册的回调函数。此外,从代码中,当你做一些动作时(例如:重绘屏幕或绘制图像)。 EDT将更改传递给操作系统,并在屏幕上呈现。因此,双向互动。

因为提到的Swing UI工具包是单线程的。因此,建议从EDT调用任何Swing库,只能使用System.invokeLater。更多信息here

答案 1 :(得分:3)

您正在寻找Event Dispatch Thread

了解它非常重要。了解代码最终将运行的线程至关重要 - 长时间运行的任务应该在EDT上运行。相反,在他们自己的线程上调度这些任务,然后在操作结束时运行回调以使用SwingUtilities更新GUI。