Java process.waitFor()不会阻塞该线程

时间:2016-07-19 17:02:08

标签: java process

我正在构建一个应该在我的Windows PC上启动其他应用程序的应用程序。当应用程序启动时,我的代码应该等到我关闭该程序以继续执行。

System.out.println("Starting ccleaner...");
Process p = Runtime.getRuntime().exec("C:\\Program Files\\CCleaner\\CCleaner64.exe");
System.out.println("Before wait");
p.waitFor(); 
//Here it should wait until the subprocess is 
// exited/the ccleaner programs exit button is clicked   
System.out.println("After wait");

所有发生的事情是它不会等待,它立即执行。 我在文档中查找了waitFor()方法,并说:

  

如果需要,使当前线程等待,直到此Process对象表示的进程终止。如果子进程已终止,则此方法立即返回。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出。

这对我来说似乎很清楚。但是我在这个网站上查看了有关此问题的其他问题,并找到了一些涉及读取流的解决方案,但据我所知,这些主要是当你有自己的bat文件时,你想要运行。但我也试过这些,但没有让它发挥作用。有趣的是,我上面的代码与tutorialpoints.com上提供的代码大致相同。

我也尝试过使用process.isAlive(),但我似乎无法让那个人工作。

有谁知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

waitFor()完全符合您的预期。你的理解没有错。

我怀疑你正在运行的程序确实正在退出,导致waitFor()立即返回。在父进程退出时,它可能正在启动一个或多个正在执行实际工作的子进程。