2012-08-01 1 views
0

ProcessBuilder를 사용하여 Java 응용 프로그램에서 대화식 실행 파일을 실행하려고합니다. 그것은 입력을 받아서 출력을 생성하고 다음 입력을 기다려야합니다. 입력/출력 스트림의 주요 문제점 나는 입력을 보내고 아무것도 얻지 못한다. 여기에 코드입니다 :ProcessBuilder를 사용하여 Java 대화식 프로세스에서 InputStream을 읽는 중

private static Process process; 
private static BufferedReader result; 
private static PrintWriter input; 

process = new ProcessBuilder("compile-lm", lmFile.toString(), " --score yes").redirectErrorStream(true).start(); 

input = new PrintWriter(new OutputStreamWriter(process.getOutputStream()), true); 
input.println(message); 
System.out.println(message); 

result = new BufferedReader(new InputStreamReader(process.getInputStream())); 
String line = new String(); 

while ((line = result.readLine()) != null) 
{ 

/* Some processing for the read line */ 

System.out.println("output:\t" + line); 
} 
+0

종료 상태 인 경우 'int es = process.waitFor(); '그리고 무엇이 문제인지를 표시합니다. – zizoujab

+0

@ZiedJaballah 올바른 작업 'input.println (message)'이 끝난 후 종료 상태를 얻으려고했으나 0 정상 종료되었습니다. 문제가있는 곳을 조사 할 수있는 다른 방법이 있습니까? – asadek

+0

명령을 변경하십시오. 코드가 깨끗해진다. 커맨드가 아무것도 반환하지 않기 때문에 출력이 나오지 않을 수도 있습니다. – zizoujab

답변

0

내가 여러 번에 걸쳐 비슷한 설정을 사용했지만 지금 작업 복사본을 찾을 수는 :(나의 첫번째 본능은 비록 당신이 독자를 초기화 라인을 이동하는 것입니다 (가변 결과) (input.println (message))

+0

왜 다른 점이 있습니까? – EJP

0

출력 스트림을 프로세스에 닫으십시오. 기본적으로 출력에서 ​​버퍼링이 일어나고있는 것이 무엇이든지 자비로 있습니다 자식 프로세스의 측면.

1

코드가 제대로 작동했는데 코드에 문제가 없습니다. 명령에 문제가 있다고 생각합니다. 실행하려는 (아무것도 반환하지 않습니다). 매개 변수를 변경하거나 테스트 할 전체 명령을 변경하십시오. 다른 곳에서 명령을 실행할 수 있다면 (예를 들어, 터미널에서 시도해보고 동일한 매개 변수를 사용하여 결과를 확인하십시오)