我有一些代码使用 Runtime.exec() 来运行外部 .jar(作为 IzPack 安装程序构建)。
如果我像这样从命令行运行这个 external.jar:
java -jar external.jar
然后命令提示符在应用程序完成之前不会返回控制。但是,如果我从某个 java 类中运行 external.jar,请使用:
Process p = Runtime.getRuntime().exec("java -jar external.jar");
int exitCode = p.waitFor();
System.out.println("Process p returned: " + exitCode);
然后p
几乎立即返回成功代码0
,尽管 external.jar 尚未完成执行(我也通过ProcessBuilder
外部文件执行的路线尝试过)。
为什么它等待从命令行返回,而不是在另一个 java 程序中执行时?
我还设置了 3 个罐子,A、B 和 C,其中 A 调用 B 调用 C(使用Runtime.exec()
),其中 CThread.sleep
持续 10 秒,作为一个简单的测试,并且正如预期的那样,A 直到 10 秒后才返回它运行。
我认为这可能是 external.jar 的某种线程问题,其中执行正在从一件事移交给另一件事,但鉴于它直接从命令行工作,我有点希望看到相同的行为(可能是天真)从另一个 java 程序中调用时。
我已经使用 Java 6 在 Windows 和 Ubuntu 上对此进行了测试。
谢谢!