0

Я создаю программу для обмена сообщениями, где клиенты общаются с сервером и т. Д. Проблема, на которую я наткнулся, заключается в попытке создать ObjectInputStream и ObjectOutputStream. Вот метод, который экземпляр объекта потоки:Java ObjectInputStream не создается экземпляр

private void initializeStreams() { 
     try { 
      input = new ObjectInputStream(socket.getInputStream()); 
      if (input != null) { 
       System.out.println("ObjectInputStream successfully initiated"); 
      } else { 
       System.out.println("ObjectInputStream is null but did not return an exception when being instantiated"); 
      } 
     } catch (IOException ioe) { 
      System.out.println("Could not initialize ObjectInputStream: " + ioe.getMessage()); 
     } 
     try { 
      output = new ObjectOutputStream(socket.getOutputStream()); 
      if (output != null) { 
       System.out.println("ObjectOutputStream successfully initiated"); 
      } else { 
       System.out.println("ObjectOutputStream is null but did not return an exception when being instantiated"); 
      } 
     } catch (IOException ioe) { 
      System.out.println("Could not initialize ObjectOutputStream: " + ioe.getMessage()); 
     } 
    }` 

Проблема в этом методе является то, что ни один из System.out.println() методы не вызывался, хотя, по крайней мере, насколько мне известно, один для каждый из потоков должен быть вызван. Например, при создании объекта ObjectInputStream он должен либо выбросить исключение (что, по-видимому, не потому, что вызов System.out.println() не вызван), возвращая значение null (что также не похоже на то, что система .out.println() не получает вызов) или успешно создает объект ObjectInputStream, чего нет, потому что вызов System.out.println() не вызван. Почему это не срабатывает ни в одной из этих ситуаций? Я пропустил еще одну ситуацию, которая может возникнуть?

P.S. Да, метод initializeStreams() вызывается из программы, я просто проверил его, поместив System.out.println() в первую строку метода.

Спасибо

+0

Добавить точки останова и отладки. – Mena

+0

Попробуйте отладить код, посмотрите, что произойдет, когда вы пройдете через этот метод по одной строке за раз. –

+0

Спасибо за ваше время, мне удалось исправить проблему – andyfed

ответ

0

Попробуйте написать что-то на консоли в наконец-кластера. Что может быть, это то, что выбрано исключение, которое не попадается.

Но вы бы это видели ... не так ли?

Мой первый совет: отлаживайте свою программу, вот что мне помогло.

Но вы можете попробовать это:

private void initializeStreams() { 
     input = null; 
     output = null; 
     try { 
      input = new ObjectInputStream(socket.getInputStream()); 
      } 
     } catch (IOException ioe) { 
      System.out.println("Could not initialize ObjectInputStream: " + ioe.getMessage()); 
     } 

     //just copied the if outside of the try-catch-cluster 
     if (input != null) { 
        System.out.println("ObjectInputStream successfully initiated"); 
     } else { 
      System.out.println("ObjectInputStream is null but did not return an exception when being instantiated"); 


     try { 
      output = new ObjectOutputStream(socket.getOutputStream()); 

     } catch (IOException ioe) { 
      System.out.println("Could not initialize ObjectOutputStream: " + ioe.getMessage()); 
     } 

     if (output != null) { 
      System.out.println("ObjectOutputStream successfully initiated"); 
     } else { 
      System.out.println("ObjectOutputStream is null but did not return an exception when being instantiated"); 
       } 
    }` 

То одна вещь, которую я хотел бы попробовать, чтобы выяснить, что и где проблема. Даже если это не имеет большого смысла;)

+0

Спасибо большое за ваше время и помощь, я смог исправить проблему в конечном итоге.Я объяснил, как в другом комментарии вы можете пойти и проверить, если вы заинтересованы – andyfed

0

Хорошо, вы ловите только IOException. В вашем коде может быть RuntimeException. В этом случае вы не попадете в ваш блок catch.

Изменить IOException на Exception, и вы увидите причину.

+0

Спасибо за ваше предложение, я в конечном итоге исправил проблему – andyfed

0

new ObjectInputStream() может генерировать исключения, отличные от IOException, но ваш try-catch только захватывает IOException. Что произойдет, если исключение будет одним из других типов?

+0

Спасибо за ваше предложение, я в конечном итоге смог исправить проблему, это было связано с программа застревает при вызове socket.getInputStream(), потому что на моем сервере возникла странная проблема, и она не смогла создать экземпляр своего потока вывода, поэтому метод socket.getInputStream() блокировал программу, потому что не смог найти результат поток с другой стороны – andyfed

0

Заменить IOException с Exception класса, который является предком всех исключений classes.Whatever может быть исключением, это, безусловно, поймают с помощью Exception класса в блоке поймать.

Так что замените catch (IOException ioe) на catch (Exception ioe) везде в вашем коде. Тогда u может найти, откуда исходит исключение.

+0

Спасибо за ваше предложение, я в конечном итоге смог исправить проблему. Если вам интересно, я написал, как в другом комментарии – andyfed

Смежные вопросы