处理事件调度线程

bco*_*lan 3 java swing awt event-dispatch-thread

我有一个关于'事件派遣线程'的问题.我有一个Main类,也是一个JFrame.它初始化代码中的其余组件,其中一些不涉及Swing,其中一些涉及.使用EDT简单地初始化Main类就足够了吗?...

public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            new Main();
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这样一切都将在Event Dispatcher线程上运行.

Dev*_*ler 6

这通常就足够了,直到您开始使用后台线程进行计算,数据采集等.然后,您需要在更改摆动组件或其模型之前开始小心验证您是否在EDT上.

你可以用以下方法测试你是否在EDT上执行:

    if (SwingUtilities.isEventDispatchThread()) {
        // Yes, manipulate swing components
    } else {
        // No, use invokeLater() to schedule work on the EDT
    }
Run Code Online (Sandbox Code Playgroud)

另外,请参阅SwingWorker类,了解有关如何将工作交给后台线程并在EDT上处理结果的详细信息