我有一个 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/