2011-09-12 61 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'不能解决这篇(优秀)文章中提到的大多数问题。 –

相关问题