Ошибка класса Java: java.io.IOException: канал закрывается - PullRequest
5 голосов
/ 17 февраля 2011

Мы периодически получаем «java.io.IOException: канал закрывается» с кодом ниже. Существует очень прерывистый характер. Любой совет? Я попытался повторить это, и когда я отключаю свою машину от сети, я могу получить эту ошибку. Этот класс читает и записывает информацию после открытия сеанса Siebel CRM.

Здесь с кодом класса 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)

Ответы [ 2 ]

6 голосов
/ 17 февраля 2011

Происходит следующее: внешний процесс, в который вы пытаетесь записать, закрыл канал, подключенный к его стандартному входному потоку. Возможно, он только что вышел.

Попробуйте прочитать и распечатать стандартный вывод процессов и стандартную ошибку, чтобы увидеть, дают ли они объяснение происходящему.

2 голосов
/ 17 февраля 2011

Ну, это тот случай, когда вы закрыли потоки и даже после этого пытаетесь записать данные в потоки ...

Я предполагаю, что один поток обрабатывается в 2 потоках, в которых один поток мог закрыть поток (это может быть программно или по некоторому исключению в вашем потоке, закрывающем блок finally). а другой поток не уведомляется и пытается записать в этот поток.

Надеюсь, это поможет вам

...