2011-04-10 49 views
1

我試圖使用從我的Java Swing應用程序啓動外部程序啓動外部程序如下:無法從Java不關閉Java應用程序

Process proc = Runtime.getRuntime().exec(cmd); 

但外部程序實際上從未被推出,直到我關閉從我的Java應用程序...每次。 只有在我關閉後纔會啓動。

我試圖運行外部程序是一個EXE接受參數這樣:

cmd = "externalProgram.exe -v --fullscreen --nowing"; 

怎麼可能是錯在這裏。 滑稽足夠它工作正常,如果我嘗試喜歡的東西很簡單:

Process proc = Runtime.getRuntime().exec("notepad.exe"); 

回答

5

您可能需要從進程的標準輸出讀,或關閉標準輸入,纔將繼續進行。爲了讀取輸出,問題是緩衝區可能已滿,阻塞了程序;爲了關閉輸入,問題是一些程序會嘗試從那裏讀取數據,如果可用的話,等待這樣做。這些技巧中的一個或兩個很有可能爲你解決問題。

+0

謝謝你。我關閉了所有被抨擊的流,現在它似乎工作。 進程p = Runtime.getRuntime()。exec(cmd.toString()); \t \t p.getInputStream()。close(); \t \t p.getOutputStream()。close(); \t \t p.getErrorStream()。close(); 只是因爲某種原因關閉輸入流不能工作。 – Glstunna 2011-04-10 03:48:12

2

您也可以讀取錯誤輸出流,以檢查它的程序實際上是被成功執行

String cmd = "svn.exe"; 
Process proc = Runtime.getRuntime().exec(cmd); 
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getErrorStream())); 
String line = null; 
while((line=reader.readLine())!=null){ 
    System.out.println(line); 
} 
reader.close(); 

我的控制檯顯示

使用「svn help」的用法。

這顯然表明該程序是由Java執行的。

+0

謝謝。我不需要任何錯誤輸出在我的Java應用程序,因爲它意味着一個沉默的發射,所以我只是關閉了流,它的工作原理。 – Glstunna 2011-04-10 03:51:44