0
모두, 표준 출력과 로그/오류/예외 출력을 하위 프로세스에서 가져와야하는 프로세스가 있습니다. 표준 출력은 괜찮지 만 ErrorStream을 얻을 수 없기 때문에 프로그램이 거기서 멈춰 있습니다. 여기 간단한 코드가 있습니다. 마술은 없지만 왜 여기서 오류 스트림을 얻을 수 없습니까? 그것을 보아 주셔서 감사합니다.Java Process가 ErrorStream 메시지를받을 수 없습니다.
BufferedReader standard =
new BufferedReader(new InputStreamReader(process.getInputStream()));
BufferedReader error =
new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line = null;
while ((line = standard.readLine()) != null) {
System.out.println(line);
}
while ((line = error.readLine()) != null) {
System.out.println(line);
}
이제 제안 된 것처럼 출력과 오류 스트림을 처리하기 위해 두 개의 스레드를 사용했지만 다음과 같이 여전히 동일한 문제가있었습니다. 아무도 통찰력을 줄 수 없나요? 감사.
ProcessBuilder pb = new ProcessBuilder(listArgs);
pb.redirectErrorStream();
Process process = pb.start();
StreamThread output = new StreamThread(process.getInputStream());
StreamThread error = new StreamThread(process.getErrorStream());
output.start();
error.start();
while (true) {
try {
output.join();
break;
}
catch (InterruptedException ie) {
ie.printStackTrace();
}
}
StreamThread의 정의 : 당신의 루프에서
public static class StreamThread extends Thread{
private InputStream input = null;
public StreamThread(InputStream in){
input = in;
}
String line = null;
public void start(){
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
try{
while((line=reader.readLine()) != null){
System.out.println(line);
}
reader.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
의견을 보내 주셔서 감사합니다.하지만 의견을 잘 이해하지 못합니다. 첫 번째 while 루프의 끝에서 출력 스트림 읽기가 완료되지 않았습니까? – user697911
@ user697911 : 네, 그런 일이 언제 일어날 것으로 예상합니까? 일반적으로 프로세스는 완료 될 때까지 출력 스트림을 열린 상태로 유지합니다 (따라서'readLine' 블록을 만듭니다). –
그래서,이 도움이되지 않습니까? 나는 시도했다, 그것은 닫히지 않는다. while ((line = standard.readLine())! = null) { System.out.println (line); } standard.close(); – user697911