2014-02-14 72 views
0

我在Process Builder的幫助下通過java代碼實現了一些命令。 以下是我的代碼BufferedReader.readLine()方法阻止流程

Process poc = null; 
List<String> result = new LinkedList<String>(); 
BufferedReader response = null; 

ProcessBuilder pb = new ProcessBuilder(command); 
pb.directory(new File(commands.get(GlobalConstants.ADB_PATH_WINDOW))); 
poc = pb.start(); 

而且我讀書用的BufferedReader其輸出:

response = new BufferedReader(new InputStreamReader(poc.getInputStream())); 
String line = ""; 
while ((line = response.readLine()) != null) 
{ 
    result.add(line); 
    if (line.contains("daemon started successfully")) 
    { 
     return result; 
    } 
} 

但有時line = response.readLine()方法進去infinite loop。 我知道原因是什麼,但我無法使用readLine()函數解決此問題。 有人可以用不同的閱讀邏輯來幫助我。

+0

確定的'守護程序啓動successfully'出現在標準輸出的文本,而不是標準錯誤?你不會在你的'ProcessBuilder'中重定向stderr。另外,爲什麼使用'LinkedList'? 'List'的迭代遵守契約的插入順序,所以'ArrayList'就足夠了 – fge

+0

使用LinkedList或者ArrayList不對應這個問題。是的,無限循環意味着它睡覺並等待文件結束。但它不承認EOF,這就是爲什麼它不能將其控制權交還給代碼。我的問題是:是否有其他方法可以替代readLine()函數? –

回答

0

也許錯誤來自另一個原因。 檢查是否EOF是真的達到:

try { 
while (true) { 
    result.add(response.readLine()); 
    if (line.contains("daemon started successfully")) 
    { 
     return result; 
    } 
} } catch (EOFException e) {} 
+0

空的catch語句如何幫助檢查? – eis

+0

不再有無限循環? OFC你可以添加任何控制檯輸出 – MojioMS

+0

我不明白這將如何修復無限循環。你想澄清一下嗎?如果有一個無限循環,那麼如何捕捉EOFException會有所幫助? – eis

相關問題