java - 在 Java 中运行 .bat 文件

标签 java windows batch-file

我目前正在尝试用 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);

我几天来一直试图解决这个问题,但没有成功。有什么想法吗?

编辑:

只是为了澄清答案中所述的内容:

重点是执行以下操作:

  1. 运行批处理文件
  2. 批处理文件启动批处理客户端
  3. Java程序继续运行
  4. 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/

相关文章:

windows - 在混合批处理/powershell 脚本运行中转义双引号问题

java - 文本字段 requestFocus 失去第一次按键? (JavaFX2)

MySQL 二进制日志位置 Windows 2008 Server

java - hibernate 条件 : find entity if any of its children's children have a specific property

windows - 如何使用 PowerShell 将新文件从一个文件夹复制到另一个文件夹

windows - Windows 中的上下文菜单项

windows - 有没有办法制作只能播放一次的音频文件?

Windows批处理命令问题,启动excel temp.xls

java - 在 JAR 中加载属性文件?

java - 在 Android Studio 中导入 Google Play Services 库