批处理文件在执行Java程序后立即终止(如果从另一个Java程序调用批处理文件)

时间:2017-10-23 08:26:56

标签: java windows batch-file

我有一个名为' StartUpdate.bat'的批处理文件。其中包含以下内容:

set CLASSPATH="myclasspath"
java -cp %CLASSPATH% UpdateProgram
runMyApp.bat

如果我运行' StartUpdate.bat'直接从命令行,它执行UpdateProgram,然后立即运行MyApp.bat。这是意图。

但是,如果我打电话给'StartUpdate.bat'从另一个Java程序,它在完成UpdateProgram后立即终止。 ' StartUpdate.bat'使用

从其他Java程序调用
Runtime.getRuntime().exec(path + "StartUpdate.bat");

StartUpdate.bat执行得很好,就像里面的UpdateProgram一样,但UpdateProgram之后没有别的。

为什么它会这样?我应该怎么做才能执行批处理文件的其余部分?

2 个答案:

答案 0 :(得分:1)

您可以使用callstart执行java计划

答案 1 :(得分:0)

明确使用setDaemon(false)的用户线程。似乎存在问题。

只要有用户(非守护程序)线程,JVM就会使应用程序保持活动状态。当没有用户线程存在时,守护程序线程将关闭。

由于守护程序线程通常用于此类“服务器”之类的目的,因此常常存在误解。

其余ProcessBuilder对于此任务来说将是一个更强大的类。

ProcessBuilder pb = new ProcessBuilder("dir");
Process process = pb.start();
int returnCode = process.waitFor();