[英]Java Process can't get ErrorStream message
每個人,我都有一個需要從子流程中獲取標准輸出和日志/錯誤/異常輸出的流程。 標准輸出很好,但是我無法獲取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 ((line = standard.readLine()) != null) {
System.out.println(line);
}
while ((line = error.readLine()) != null) {
System.out.println(line);
}
您將繼續從輸出流中讀取數據,直到完成為止-這很可能是進程終止時。 只有這樣,你開始讀錯誤流。
您可能應該至少將其中之一放入不同的線程中,以便可以同時從兩個流中讀取。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.