Java 当我按windows+;D

Java 当我按windows+;D,java,swing,jdialog,suspend,Java,Swing,Jdialog,Suspend,有一个名为a的窗口,当我单击一个按钮时,对话框B将弹出,然后我单击对话框B上的一个按钮,B将隐藏,此时将进行计算并显示窗口a。计算完成后,将出现对话框C。但当我在对话框C显示之前按Windows+D显示桌面时,对话框将暂停,我必须通过任务管理器终止该进程。这里的所有对话框都是模态的 您可以在JDialog的构造函数中指定父窗口。此外,您可以将对话框指定为模态,以防止在对话框打开时与父窗口发生任何交互。示例代码: public static void main(String[] args) {

有一个名为a的窗口,当我单击一个按钮时,对话框B将弹出,然后我单击对话框B上的一个按钮,B将隐藏,此时将进行计算并显示窗口a。计算完成后,将出现对话框C。但当我在对话框C显示之前按Windows+D显示桌面时,对话框将暂停,我必须通过任务管理器终止该进程。这里的所有对话框都是模态的

您可以在
JDialog
的构造函数中指定父窗口。此外,您可以将对话框指定为模态,以防止在对话框打开时与父窗口发生任何交互。示例代码:

public static void main(String[] args) {
    JFrame frame = new JFrame("Test");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400,400);
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);

    JDialog dialog = new JDialog(frame);
    dialog.setSize(200,200);
    dialog.setLocationRelativeTo(frame);
    dialog.setModal(true);  // Works also with .setModal(false)
    dialog.setVisible(true);
}

1) 为了更快地获得更好的帮助,请张贴一个(最小的完整和可验证的示例)。2) 所有GUI更新都应在事件调度线程上执行。有关更多详细信息,请参阅。谢谢,但我无法使用MCVE重现问题。也许我找不到关键点。从事实开始,你的MCVE和实际代码之间一定有差异。开始把东西放进MCVE,这样它就像你的主代码一样,直到MCVE显示出同样的问题。这将有助于大大缩小问题的根源。您是否已将window
A
定义为Dialog
C
的父级。您是否使用
SwingWorker
进行计算+1对于MCVE btw。我已将父窗口和对话框窗口设置为模态。我认为这不是重点。因为如果我不按windows+d,一切都会正常进行。你还有别的想法吗?我无法重现你的问题。你能从我编辑的帖子中运行示例代码吗?你用的是什么操作系统?我用的是Windows7。很抱歉,我没有详细描述这个问题,我已经重新编辑了。如果你有时间,请再读一遍,非常感谢。