答案 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独立运行时的作用,可能是等待输入,因此它永远不会退出