java - Swing Worker 模态对话框不会关闭

标签 java swingworker event-dispatching

我有一个 SwingWorker 线程启动模态对话框(从一个属性更改监听器监听已启动的 StateValue),然后 swing worker 继续执行它的工作。但是,看起来 done 方法没有被调用,因为它是在 EDT 上调用的,但是 swing worker 的模态对话框正在阻止 EDT。所以,我无法从 EDT(或从 done 方法)关闭对话框。现在我只是在该方法结束时从 doInBackground 关闭对话框,但是从 doInBackground 看来这有点不安全,因为它不在 EDT 上。处理这个问题的最佳方法是什么?谢谢。

最佳答案

即使显示模态对话框,调度循环也应继续调度与 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);
    }
}

关于java - Swing Worker 模态对话框不会关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1925656/

相关文章:

java - Jslider从JButton周期性改变值时无法勾选

java - 实现 SwingWorker

java - AWT EventQqueue AccessControlException

java - JList 上的 AWT-EventQueue-1

java - 引入struts2标签后表单未正确对齐

java - 使用JDK 7编译Java 6源文件 : pros and cons

java - 如何使用 Joda-Time 表达部分间隔?

java - 如果将大量对象传递到我的 SwingWorker.process() 方法怎么办?

java - 如何为 java spring maven 应用程序映射域?