2012-12-18 75 views
2

結束所以我有這個計劃等待過程中的Java

String[] cmd = {"gnome-terminal", "--full-screen", "-e", "./toMatrix"}; 
    Process p = Runtime.getRuntime().exec(cmd); 
    copy(p.getInputStream(), System.out); 
    p.waitFor(); 
    System.out.println("Exit value = " + p.exitValue()); 

而且我希望它運行在另一個進程中,C程序toMatrix。但我需要它在新的終端窗口和全屏模式下運行,所以我需要傳遞這些參數。問題在於主進程不會等待進程p結束。我究竟做錯了什麼?

Regards

+1

也許程序只是一個啓動程序,它創建另一個進程並終止,而真正的過程繼續運行? – Philipp

回答

3

waitFor()方法將使調用線程等待,直到進程p完成(這可能是危險的,因爲如果進程在任何無限循環中被阻塞,主線程將一直等待

我建議寫一些信號量文件,並在你的程序從java文件完成時設置一些值。主要方法可以等待檢查信號量文件的狀態。

+0

也有用的是waitFor與超時waitFor(5,蒂姆eUnit.SECONDS);如果過程結束可以合理確定,則超時5秒 – Ironluca

5

如果沒有拋出異常,Java正在等待進程結束。這個過程可能會結束而沒有完成手頭的任務。您可能需要從流程中讀取輸出並顯示它以找出錯誤。

看一看這篇文章使用的Runtime.exec(): http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

希望這將是對你有所幫助調試問題。

+0

太棒了!它幫助了我。StreamGobbler !! – AnujKu