2014-02-14 75 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

相关问题