Swing Worker 模态对话框不会关闭

Jef*_*rey 2 java swingworker event-dispatching

我有一个 SwingWorker 线程,它启动一个模式对话框(从侦听启动的 StateValue 的属性更改侦听器),并且 swing 工作线程继续执行其工作。但是,看起来 did 方法没有被调用,因为它是在 EDT 上调用的,但 swing 工作线程的模式对话框阻止了 EDT。因此,我无法从 EDT(或完成方法)关闭对话框。现在,我只是在该方法结束时从 doInBackground 关闭对话框,但这从 doInBackground 看来有点不安全,因为它不在 EDT 上。处理这个问题的最佳方法是什么?谢谢。

Tom*_*ine 5

SwingWorker即使显示模式对话框,调度循环也应继续调度与之关联的事件。

这对我有用。

import javax.swing.*;

public class Unions {
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
            runEDT();
        }});
    }
    private static void runEDT() {
        final JDialog dialog = new JDialog((JFrame)null, true);
        new SwingWorker<Void,Void>() {
            @Override protected Void doInBackground() throws Exception {
                // But this is working.
                Thread.sleep(3000);
                return null;
            }
            @Override protected void done() {
                dialog.setVisible(false);
            }
        }.execute();
        dialog.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)