java如何判断当前线程是否为事件分派线程
我正在通过Swing进行一些开发,但我不是这方面的专家。我只知道:
1,GUI组件上的几乎所有操作都应该在事件调度程序线程中通过EventQueue运行代码来完成。invokeLater()或EventQueue。invokeAndWait()
2、如果有一个耗时的任务,我应该把它放在另一个线程而不是事件调度程序线程中,以避免GUI不响应用户
3,无法从事件调度程序线程调用invokeAndWait
因此,我希望安排一些可以由“另一个”thead或事件调度程序线程调用的代码,如下所示:
Runnabe rn = ...;
if (itIsTheEventDispatcherThread) {
rn.run();
} else {
EventQueue.invokeAndWait(rn);
}
那么,如何判断当前线程是否是事件调度线程呢?我的策略是否恰当? 非常感谢
# 1 楼答案
使用
javax.swing.SwingUtilities.isEventDispatchThread()
或者
java awt.EventQueue.isDispatchThread()
(已经在使用EventQueue
)从{}1的{a1}
1:我更喜欢
SwingUtilities
而不是EventQueue
,即使是invokeLater
(至少在使用Swing时)