Process Builder를 사용하여 Java 코드를 통해 몇 가지 명령을 실행 중입니다. 다음 내 코드BufferedReader.readLine() method blocking flow
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()
기능을 사용하여 해결할 수 없습니다. 누군가 다른 읽기 논리를 통해 나를 도울 수 있습니까?
당신은'데몬이 텍스트를 표준 출력에 표시 및 stderr하지 successfully' 시작 하시겠습니까? 당신은 당신의'ProcessBuilder'에 stderr를 리디렉션하지 않습니다. 또한, 왜'LinkedList'를 사용합니까? 'List'의 반복은 계약에 의한 삽입 순서를 존중하므로'ArrayList'가 충분합니다. – fge
LinkedList 또는 ArrayList를 사용하면이 질문에 해당하지 않습니다. 예, 무한 루프는 잠자기 상태가되어 파일의 끝을 기다립니다. 그러나 그것은 EOF를 인식하지 못했습니다. 즉, 코드를 제어하지 못하는 이유입니다. 내 질문은 : readLine() 함수를 대체 할 수있는 다른 방법이 있습니까? –