我目前正在尝试用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);
我一直试图弄清楚这几天没有运气。有什么想法吗?
编辑:
只是为了澄清答案中陈述的内容:
关键是要做到以下几点:
编辑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
答案 0 :(得分:0)
如果您不需要同时执行任何操作,则可以在Process中使用waitFor函数。您可能遇到的问题是您当前的线程不会等待批处理线程完成。
答案 1 :(得分:0)
Runtime.exec()
方法会生成一个进程,但不会等待它完成。
您应该在返回的waitFor()
实例上使用Process
方法,以便等待进程结束。
另外,@ ixe013的评论是正确的:您应该从命令中删除start
字,因为它会产生另一个进程。如果您不删除start
,则waitFor()
对您没有多大帮助:它将等待start
命令结束,这是即时的。
答案 2 :(得分:0)
怎么样:
File batchFile = new File("path\script.bat");
ProcessBuilder processBuilder = new ProcessBuilder(batchFile.getAbsolutePath());
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();
int exitStatus = process.waitFor();
System.out.println("Processed finished with status: " + exitStatus);