我正在用Swing做一些开发,但我不是这方面的专家。我只知道:
1,几乎所有GUI组件上的操作都应该在事件分派器线程中由EventQueue.invokeLater()或EventQueue.invokeAndWait()运行代码完成。
2、如果有一个耗时的任务,我应该把它放在另一个线程而不是事件调度线程中,以避免GUI不响应用户。
3、事件调度线程无法调用invokeAndWait。
所以,我希望安排一些代码,可以调用"另一个"事件调度程序线程的头或头如下:
Runnabe rn = ...;
if (itIsTheEventDispatcherThread) {
rn.run();
} else {
EventQueue.invokeAndWait(rn);
}
那么,如何判断当前线程是否是事件调度线程呢?我的策略合适吗?非常感谢!
使用javax.swing.SwingUtilities.isEventDispatchThread()
或java awt.EventQueue.isDispatchThread()
(已经使用EventQueue
)
来自SwingUtilities
1
如果当前线程是AWT事件调度线程则返回true。
从1.3开始,这个方法只是java.awt.EventQueue.isDispatchThread()的一个掩护。
<一口>
1:对于invokeLater
,我更喜欢SwingUtilities
而不是EventQueue
(至少在使用Swing时)一口>