我正在构建一个应该在我的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()
,但我似乎无法让那个人工作。
有谁知道我在这里做错了什么?
答案 0 :(得分:1)
waitFor()
完全符合您的预期。你的理解没有错。
我怀疑你正在运行的程序确实正在退出,导致waitFor()
立即返回。在父进程退出时,它可能正在启动一个或多个正在执行实际工作的子进程。