调用dispose()或WindowEvent会导致父窗口冻结

时间:2016-07-29 16:31:07

标签: java jframe jpanel

我目前正在尝试向程序添加功能,这样如果用户关闭子窗口,它也将关闭创建它的父窗口。我启动启动程序,在菜单中选择一个创建父窗口的选项,然后创建子窗口。该程序已经有一个endProcess函数,可以将内容输出到父窗口,因此我认为它是完成此任务的好地方。这是函数:

private synchronized void endProcess(Exec.FinishedEvent e) {
    exec.removeFinishedListener(this);
    exec = null;
    String str;
    if (e.getExitValue() != 0) {
        JOptionPane.showMessageDialog(this, exec, "Exec '"+e.getExec()+"' failed: return value: "+e.getExitValue(), JOptionPane.ERROR_MESSAGE);
        str = "Process FAILED [exit="+e.getExitValue()+"]: '"+e.getExec()+"'\n";
    } else
        str = "Process Done [exit="+e.getExitValue()+"]: '"+e.getExec()+"'\n";
    statusLabel.setText(str);
    outputTextArea.append("*****" + str);
    //this.dispose();
    //this.dispatchEvent(new WindowEvent(this, WindowEvent.WINDOW_CLOSING));

我尝试添加的两个注释掉的行。 (两个不同的想法)这两个都正常工作,当我关闭子窗口时,父窗口也关闭。但是,它也会冻结原始程序窗口,并且不会响应任何内容。我相信我在某种程度上也会在原始程序窗口中调用某种杀戮功能?谢谢,如果我需要提供其他任何内容,请告诉我们!

澄清......

原始程序=启动程序时首先打开的窗口

父窗口=命令我在原始程序中运行以生成子窗口(我希望关闭这个窗口,而不是关闭孩子时的原始程序)

子窗口=从父窗口创建的窗口,我希望在子窗口关闭时关闭父窗口。

0 个答案:

没有答案