サブプロセスから標準出力とログ/エラー/例外出力を取得する必要があるプロセスがあります。標準出力は問題ありませんが、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);
}
さて、示唆されているように、2 つのスレッドを使用して出力ストリームとエラー ストリームを処理しましたが、次のように同じ問題が発生しました。誰かが私にいくつかの洞察を与えることができますか? ありがとう。
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();
}
}
}