有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何判断当前线程是否为事件分派线程

我正在通过Swing进行一些开发,但我不是这方面的专家。我只知道:

1,GUI组件上的几乎所有操作都应该在事件调度程序线程中通过EventQueue运行代码来完成。invokeLater()或EventQueue。invokeAndWait()

2、如果有一个耗时的任务,我应该把它放在另一个线程而不是事件调度程序线程中,以避免GUI不响应用户

3,无法从事件调度程序线程调用invokeAndWait

因此,我希望安排一些可以由“另一个”thead或事件调度程序线程调用的代码,如下所示:

Runnabe rn = ...;
if (itIsTheEventDispatcherThread) {
    rn.run();
} else {
    EventQueue.invokeAndWait(rn);
}

那么,如何判断当前线程是否是事件调度线程呢?我的策略是否恰当? 非常感谢


共 (1) 个答案

  1. # 1 楼答案

    使用javax.swing.SwingUtilities.isEventDispatchThread()
    或者java awt.EventQueue.isDispatchThread()(已经在使用EventQueue

    从{}1的{a1}

    Returns true if the current thread is an AWT event dispatching thread.

    As of 1.3 this method is just a cover for java.awt.EventQueue.isDispatchThread().


    1:我更喜欢SwingUtilities而不是EventQueue,即使是invokeLater(至少在使用Swing时)