我有一个名为' 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之后没有别的。
为什么它会这样?我应该怎么做才能执行批处理文件的其余部分?
答案 0 :(得分:1)
答案 1 :(得分:0)
明确使用setDaemon(false)
的用户线程。似乎存在问题。
只要有用户(非守护程序)线程,JVM就会使应用程序保持活动状态。当没有用户线程存在时,守护程序线程将关闭。
由于守护程序线程通常用于此类“服务器”之类的目的,因此常常存在误解。
其余ProcessBuilder对于此任务来说将是一个更强大的类。
ProcessBuilder pb = new ProcessBuilder("dir");
Process process = pb.start();
int returnCode = process.waitFor();