2011-09-12 19 views
2

コードです:それは成功し、端末を開きますが、何も、空のcatchブロックを記述しないでください出力この端末から入出力が得られないのはなぜですか?ここ

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. に表示されません。それはちょうどが間違ってであり、それはあなたが感じることができるデバッグの多くの時間を要するでしょう...完璧より少なく。
  2. xtermはデフォルトで出力を生成しません。ウィンドウを表示するだけです。端末にxtermを開始して、どの出力が生成されているかを確認してください(元の端末では、新しいウィンドウでは表示されません)。
  3. When Runtime.exec() won'tを読み、すべてに従ってください。
+1

ポイント#1は、それ自身の別のupvoteに値する。プロダクションコードで空のtry/catchを見つけるたびに、私は衝動を抑えなければなりません。 – mcfinnigan

+0

これらの優れた点以外にも、子プロセスのエラーストリームも読み取る必要があります –

+0

@Hemal:これは3番目の項目で説明されていますが、この特定の項目が当面の問題に関連するとは思われません。 –

1

あなたはWhen Runtime.exec() won'tを読まれましたか?記事全体を読むと、execコマンドの落とし穴の多くを避けて理解することができます。

次に、他のプロセスを呼び出すより現代的な方法であるProcessBuilderを読むことができます。

ps。 catchブロックを空にして例外を取り除き、デバッグするのをより困難にします。

+0

残念ながら、 'ProcessBuilder'はこの(優秀な)記事で言及されている問題のほとんどを解決しません。 –

関連する問題