我目前正在尝试用 Java 执行 .bat 文件。 bat 文件实际上运行完美,但执行后,我的主程序退出。我不知道为什么,我需要它在执行 bat 文件后继续执行其代码。程序和bat文件都将在Windows上运行。这是我如何运行bat文件的代码:
if(!running) {
@SuppressWarnings("unused")
Process process = Runtime.getRuntime().exec("cmd /c start "+localTargetInPath+"\\startBatchClient.bat");
process.getInputStream().close();
process.getOutputStream().close();
process.getErrorStream().close();
}
//wait to allow batch client to start up
Thread.sleep(1000);
我几天来一直试图解决这个问题,但没有成功。有什么想法吗?
编辑:
只是为了澄清答案中所述的内容:
重点是执行以下操作:
- 运行批处理文件
- 批处理文件启动批处理客户端
- Java程序继续运行
- Java 程序连接到正在运行的批处理客户端
编辑2:
这是批处理文件的内容(它再次运行应用程序,没有任何问题:
set JAVA_HOME="C:\Program Files\Java\jdk1.6.0_23"
set ep_root=C:\app\plm\e6_1_1\P2\BatchClient
set axalant_root=C:\app\plm\e6_1_1\P2\BatchClient\axalant
set batchcli_root=C:\app\plm\e6_1_1\P2\BatchClient
set EP_MACH=intel-ms-nt4.0
C:\Windows\system32\cmd.exe /K c:\app\plm\e6_1_1\P2\BatchClient\axalant\cmd\batchclient_nowrapper.cmd -eciservermode -p %localInPath%\batchClient.properties -T C:\zftmp\svc.emea.batch11e\testclient.properties
最佳答案
Runtime.exec()
方法生成一个进程,但不等待它完成。
您应该在返回的 Process
实例上使用 waitFor()
方法,以等待进程结束。
另外,@ixe013 的评论是正确的:您应该从命令中删除 start
单词,因为它会生成另一个进程。如果你不删除 start
,那么 waitFor()
对你没有多大帮助:它会等待 start
命令结束,这是瞬时的。
关于java - 在 Java 中运行 .bat 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23495944/