事件调度线程

Swing 事件处理代码在称为事件调度线程的特殊线程上运行。大多数调用 Swing 方法的代码也都在此线程上运行。这是必需的,因为大多数 Swing 对象方法都不是“线程安全的”:从多个线程中调用它们会带来thread interference内存一致性错误的风险。一些 Swing 组件方法在 API 规范中被标记为“线程安全”。这些可以从任何线程安全地调用。所有其他 Swing 组件方法都必须从事件分发线程中调用。忽略此规则的程序在大多数情况下都可以正常运行,但是会遇到难以预料的错误,这些错误很难重现。

将在事件分发线程上运行的代码视为一系列简短任务很有用。大多数任务是事件处理方法的调用,例如ActionListener.actionPerformed。其他任务可以使用invokeLaterinvokeAndWait通过应用程序代码安排。事件分发线程上的任务必须快速完成;如果没有,则将备份未处理的事件,并且用户interface将无响应。

如果需要确定代码是否在事件分发线程上运行,请调用javax.swing.SwingUtilities.isEventDispatchThread