2014-02-14 5 views
0

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() 기능을 사용하여 해결할 수 없습니다. 누군가 다른 읽기 논리를 통해 나를 도울 수 있습니까?

+0

당신은'데몬이 텍스트를 표준 출력에 표시 및 stderr하지 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