2011-02-17 65 views
4

我們通過下面的代碼間歇性地獲取「java.io.IOException:管道正在關閉」。本質上是非常間歇的。有什麼建議?我試圖複製這個,當我斷開我的機器從網絡,然後我能夠得到這個錯誤。 Siebel CRM會話後此類讀取和寫入信息處於打開狀態。Java類錯誤:java.io.IOException:管道正在關閉

這裏用Java類代碼。

private Process _process; 
    private OutputStream _processOut; 
    private ByteArrayOutputStream _sessionOutput; 
.... 
    _processOut = _process.getOutputStream(); 
    _sessionOutput = new ByteArrayOutputStream(); 
.... 
public void writeCommand(String command) 
    throws IOException 
    { 
     _processOut.write(command.getBytes()); 
     _processOut.flush(); 
     _sessionOutput.write(command.getBytes()); 

    } 
與實際誤差

這裏:

java.io.IOException: The pipe is being closed 
    at java.io.FileOutputStream.writeBytes(Native Method) 
    at java.io.FileOutputStream.write(FileOutputStream.java:260) 
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) 
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) 
    at mySession.writeCommand(mySession.java:169) 

回答

6

正在發生的事情是,你正在嘗試寫外部進程已關閉連接到它的標準輸入流的管道。它可能剛剛退出。

嘗試讀取和打印進程標準輸出和標準錯誤,看看他們是否給出瞭解釋發生了什麼事情。

2

那麼它是當你已經關閉了流,即使您嘗試將數據寫入流的情況下...

我猜單流在2個線程在一個線程可能有處理關閉了流(可能是編程方式,或者是在流關閉finally塊中的某個異常)。另一個線程不會收到通知並嘗試寫入該流。

我希望這可以幫到你

+0

這是行不通的嗎? – 2011-02-18 11:02:45