2010-02-17 52 views
1

我在java中有一个同步问题。 我希望我的主线程等待进程“p1”完成。 我已经使用“waitfor”方法。它并没有为我工作。导致主进程等到另一个进程完成

Process p1 = runtime.exec("cmd /c start /MIN " + path + "aBatchFile.bat"); 
p1.waitFor(); 

请问有人能帮我吗?

非常感谢。

+0

它应该工作。 p1.waitFor()的返回值是什么? – echo 2010-02-17 04:19:55

+0

这是行不通的? – 2010-02-17 04:36:52

回答

4

这里的问题是您从exec()得到的Process对象代表您开始的cmd.exe的实例。 cmd.exe的实例会做一件事情:它启动一个批处理文件,然后退出(不需要等待批处理文件,因为这是start命令的作用)。此时,您的waitFor()返回。

为了避免这个问题,你应该能够直接运行该批处理文件:

Process p1 = runtime.exec(path + "aBatchFile.bat"); 
p1.waitFor(); 

或者,尝试/wait命令行选项:

Process p1 = runtime.exec("cmd /c start /wait /MIN " + path + "aBatchFile.bat"); 
p1.waitFor(); 
+0

是的 - 我也认为,开始移除应该让你等待。 – Fakrudeen 2010-02-17 07:18:49

+0

感谢您的回答。 放置/等待不再适用于我。它不会等待主线程。 如果我删除“开始”或删除“cmd/c start/wait/MIN”,则进程p1根本不运行。 我检查了他们。 你能帮我吗? 谢谢。 – Shadi 2010-02-17 22:46:36

+0

@Shadi:如果你删除“start/MIN”,所以你的命令是exec(“cmd/c”+ path +“aBatchFile.bat”),会发生什么? – 2010-02-17 23:10:44

相关问题