2012-08-01 98 views
0

我想從使用ProcessBuilder的Java應用程序運行交互式可執行文件;它應該接受輸入,產生輸出,然後等待下一個輸入。這裏輸入/輸出流的主要問題。我發送一個輸入並且什麼也沒得到。下面是代碼:使用ProcessBuilder從Java Interactive Process讀取InputStream

private static Process process; 
private static BufferedReader result; 
private static PrintWriter input; 

process = new ProcessBuilder("compile-lm", lmFile.toString(), " --score yes").redirectErrorStream(true).start(); 

input = new PrintWriter(new OutputStreamWriter(process.getOutputStream()), true); 
input.println(message); 
System.out.println(message); 

result = new BufferedReader(new InputStreamReader(process.getInputStream())); 
String line = new String(); 

while ((line = result.readLine()) != null) 
{ 

/* Some processing for the read line */ 

System.out.println("output:\t" + line); 
} 
+0

如果你有退出狀態嘗試使用'int es = process.waitFor(); '並顯示它到什麼問題 – zizoujab 2012-08-01 09:49:35

+0

@ZiedJaballah我試圖在正確的操作'input.println(message)'之後獲得退出狀態並且它是0「正常終止」。還有什麼我可以嘗試調查問題在哪裏? – asadek 2012-08-01 10:43:14

+0

嘗試更改命令。代碼聽起來很乾淨。也許你沒有得到一個輸出,只是因爲這個命令沒有任何回報。 – zizoujab 2012-08-03 17:09:29

回答

0

我使用了一個類似的設置過很多次,但現在還不能找到一份工作:(我的第一本能雖然是移動,你初始化讀者線(結果變量)在你發送命令到進程之前(input.println(message))。

+0

爲什麼會有所作爲? – EJP 2012-08-01 11:01:25

0

嘗試關閉輸出流到進程。基本上你可以控制輸出中的任何緩衝一邊的子進程

1

我已經試過你的代碼它工作正常沒有代碼的問題我認爲與命令的問題你試圖執行(它什麼都不返回)。嘗試改變參數,甚至改變整個命令來測試。如果你可以在其他地方執行命令(終端例如嘗試它,並看到具有相同參數的輸出)