我在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()
函數解決此問題。 有人可以用不同的閱讀邏輯來幫助我。
確定的'守護程序啓動successfully'出現在標準輸出的文本,而不是標準錯誤?你不會在你的'ProcessBuilder'中重定向stderr。另外,爲什麼使用'LinkedList'? 'List'的迭代遵守契約的插入順序,所以'ArrayList'就足夠了 – fge
使用LinkedList或者ArrayList不對應這個問題。是的,無限循環意味着它睡覺並等待文件結束。但它不承認EOF,這就是爲什麼它不能將其控制權交還給代碼。我的問題是:是否有其他方法可以替代readLine()函數? –