簡體   English   中英

Java進程無法獲取ErrorStream消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM