2011-09-12 93 views
2

下面的代碼:它成功地打開一個終端,但沒有顯示在輸出爲什麼我不能從這個終端獲得輸入和輸出?

try { 
    String command= "/usr/bin/xterm"; 
    Runtime rt = Runtime.getRuntime(); 
    Process pr = rt.exec(command); 
    BufferedWriter os = 
     new BufferedWriter(new OutputStreamWriter(pr.getOutputStream())); 
    BufferedReader is = 
     new BufferedReader(new InputStreamReader(pr.getInputStream())); 
    String line = ""; 

    while ((line = is.readLine()) != null) { 
     System.out.print(line); 
    } 

} catch (Exception io) {  
} 

回答

3
  1. 不要寫空的catch塊。這只是錯誤,它會花費你許多小時的調試之後,你會覺得...不完美。
  2. xterm默認情況下不產生輸出。它只是顯示一個窗口。嘗試在終端中啓動xterm並查看它產生的輸出(在原始終端中,不在新窗口中!)。
  3. 閱讀When Runtime.exec() won't並按照全部的建議。
+1

點#1值得自己單獨upvote。每當我在生產代碼中找到一個空白的try/catch時,我都不得不壓制堅定的衝動。 – mcfinnigan

+0

除了這些優點以外,還需要讀取子進程的錯誤流 –

+0

@Hemal:這在第三項中有所解釋,我不認爲這個特定項與手邊的問題有關。 –

1

你看過When Runtime.exec() won't。如果你閱讀整篇文章,你將會避免並理解exec命令的許多缺陷。

然後你可以閱讀ProcessBuilder這是一個更現代的方式來調用其他進程。

Ps。空捕獲塊吞食異常並使其更難調試。

+0

不幸的是'ProcessBuilder'不能解決這篇(優秀)文章中提到的大多數問題。 –

相關問題