2012-04-10 61 views
1

我有一个调用一个可执行的jar的Java应用程序(主):等待完成Java的过程

Process p = Runtime.getRuntime().exec(java -jar C:\\PFC\\maestro.jar) 
p.waitFor(); 

maestro.jar是创建2个线程的Java应用程序,并调用另一可执行的jar(其过程变量是“b”)。然后,我恨不得像这样:

b.destroy(); //kill other executable jar that is called 
    manejadora.join(); //thread finished 
    controlador.join(); //thread finished 
    System.out.println("all finished"); 

maestro.jar正常运行,它显示了在日食“终止”当我运行它,所以不存在任何问题。

当校长尝试运行maestro.jar时,它运行正常,但是当maestro.jar已经完成时,校长持续在“p.waitFor()”上等待maestro.jar。

我不明白为什么。

你能给我一些关于这方面的定位吗?非常感谢!

+0

'Process.waitFor()'可能不破,因此,通过排除,这是最有可能的maestro.jar了'java.exe'过程中一直保持毕竟运行工作完成了。您可以使用Process Explorer轻松进行验证。如果是这种情况,你必须弄清楚为什么子JVM不会终止,例如使用JVisualVM进行堆转储。 – Barend 2012-04-10 11:51:06

回答

3

这可能是因为进程可能在控制台上输出的东西,而不是在单独的线程中使用。阅读这篇文章,以获得更多信息:

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

的阿帕奇EXEC库做所有这些事情对你很好..使用该库,以解决您的问题..

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

+0

+1提到commons-exec。它使事情变得更容易。 – Barend 2012-04-10 11:53:30

+0

我修改了maestro.jar ---->现在它没有调用任何东西,也没有创建2个线程。它只显示“System.out.println(”全部完成“);”。我用校长运行它,它正确完成。所以控制台上没有任何东西(System.out.println句子),并且它正确完成。 – user1297810 2012-04-10 12:20:47

0

问题解决了。我不得不退出所有“System.out.println();”句子。

所以我必须做一个日志才能看到程序活动。

谢谢大家:-)

+0

您可以将自己的答案标记为已解决! – 2013-07-11 12:06:00