进程完成时终止JFrame/Java

进程完成时终止JFrame/Java,java,process,jframe,kill,Java,Process,Jframe,Kill,我已经试着找到这个问题的答案很久了,在这里我发现了很多类似的问题,但是没有一个能解决这个问题 所以一些背景:我有一个使用JFrame的程序。框架中有一个按钮,单击该按钮时会调用以下代码以运行批处理文件: String[] commands = new String[list.size()]; commands = list.toArray(commands); Process p = Runtime.getRuntime().exec(commands); p.waitFor(); closeW

我已经试着找到这个问题的答案很久了,在这里我发现了很多类似的问题,但是没有一个能解决这个问题

所以一些背景:我有一个使用JFrame的程序。框架中有一个按钮,单击该按钮时会调用以下代码以运行批处理文件:

String[] commands = new String[list.size()];
commands = list.toArray(commands);
Process p = Runtime.getRuntime().exec(commands);
p.waitFor();
closeWindow();
“commands”是传递到Runtime.getRuntime.exec()方法的参数,因此它包括批处理文件名和其他参数。当进程完成时(即批处理文件完成时),我需要程序完全关闭JFrame并终止在Windows任务管理器中找到的关联Java进程。但是,此关闭窗口的方法不会终止进程:

public void closeWindow(){
    WindowEvent close = new WindowEvent(this, WindowEvent.WINDOW_CLOSING);
    Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(close);
}
我也尝试过destroy()、dispose()等方法,但它们总是让同一进程在任务管理器中运行。我知道这是关联的进程,因为我不能删除任何与我的Java程序和批处理文件相关的文件,直到我杀死那个Java进程。否则它会告诉我无法删除该文件,因为该文件正由另一个进程使用

是否有更好的方法在批处理文件完成时关闭窗口并停止java进程?顺便说一下,继续运行的进程只是javaw.exe中的“Java(TM)Platform SE binary”

编辑:

在对代码进行了更多的调试和修改之后,我发现p.waitFor()并不等待进程完成。在进程p完成之前调用“closeWindow()”方法。有人知道这是什么原因吗

自从我们缩小了一点,线就断了。以下是新线程:


是否尝试调用System.exit(0)?设置为System.exit(0)的frames
defaultCloseOperation
属性无效,它仍然不会终止进程。defaultCloseOperation设置为退出\u ON\u CLOSE1)要更快获得更好的帮助,请发布一个。2) 复制/粘贴
exec
上的一般提示-阅读(并实施)的所有建议。这可能会解决问题。如果没有,它应该提供更多关于失败原因的信息。然后忽略它指的是
exec
,并使用
ProcessBuilder
构建
流程。通常我会尝试发布SSCCE,但此代码太过广泛,对我或读者来说,这是有用和/或方便的。它需要来自六个类的大量信息,每个类都有自己的设置、布局、方法等