在进程完成时杀死JFrame / Java

时间:2013-12-13 03:04:44

标签: java process jframe kill

我一直试图找到这个问题的答案已经有一段时间了,并且在SO上发现了许多类似的问题,但似乎没有一个问题可以解决这个问题。

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

String[] commands = new String[list.size()];
commands = list.toArray(commands);
Process p = Runtime.getRuntime().exec(commands);
p.waitFor();
closeWindow();

“命令”是传递给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二进制文件”。

修改

经过一些调试和乱码后,我发现p.waitFor()不会等待进程完成。在Process p完成之前调用“closeWindow()”方法。有谁知道可能导致这种情况的原因?

线程已被拆分,因为我们将其缩小了一点。这是新的主题:

p.waitFor() does not wait for process to complete (Java)

0 个答案:

没有答案