如何检查可执行JAR是否已在另一个JVM中完成

时间:2009-05-27 12:14:13

标签: java process jar jvm

伙计们,我遇到了一个令人困惑的问题!我想调用一个可执行的JAR来使用runtime.exec()从我的主Java应用程序计算PI,它创建了一个用于运行可执行JAR的新JVM。我的问题是,当PI计算完成后,JVM仍处于活动状态。我的主java应用程序不知道PI计算是否完成。我还想在PI计算完成后,JVM可能会被关闭!我该怎么做呢!谢谢!

3 个答案:

答案 0 :(得分:2)

当您调用Runtime.exec()时,您将获得一个Process对象。您需要在此处致电waitFor()

您还需要捕获stdout / stderr流(在单独的线程中以防止阻塞 - 有关详细信息,请参阅this answer)。

这一切都抛弃了为什么你在一个单独的JVM中执行此操作,以及为什么你不能将相关的类加载到当前的应用程序并在本地运行库。

答案 1 :(得分:0)

要回答问题的第二部分,当没有非守护程序线程仍在运行时,JVM总是退出。或者在更简洁的演讲中,当您的应用程序“完成”并且main方法退出而不在后台运行任何线程时,JVM将完成。

无论您是从桌面/命令行自己启动Java进程,还是通过Runtime.exec()(大致相当于)激活它,都是如此。因此,当您的Pi计算终止时,它将关闭您生成的JVM,当您的原始程序完成时, JVM也将退出。

虽然我在这里完全赞同Brian,但是当你应该能够在原始JVM中运行它时,我看不到将Java应用程序作为一个单独的进程运行的好处(除了一些非常不寻常的环境因素,比如设置各种过程的良好性或处理器亲和力)。

答案 2 :(得分:0)

检查jar独立运行时的作用,可能是等待输入,因此它永远不会退出