如何判断当前线程是否是事件调度头



我正在用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)

来自SwingUtilities1

如果当前线程是AWT事件调度线程则返回true。

从1.3开始,这个方法只是java.awt.EventQueue.isDispatchThread()的一个掩护。


<一口> 1:对于invokeLater,我更喜欢SwingUtilities而不是EventQueue(至少在使用Swing时)

相关内容

  • 没有找到相关文章

最新更新