2012-04-10 101 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