Исключение NullPointerException, генерируемое из Socket.getInputStream () - PullRequest
2 голосов
/ 13 июля 2011

Я получаю исключение NullPointerException в этом коде очень редко. Это часть приложения потокового видео, которое потребляет несколько потоков RTSP одновременно, регулярно отключается и повторно подключается к ним (т. Е. Зависит от пользователя).

private void openSocket() throws IOException {
  rtspSocket = new Socket();
  rtspSocket.connect(new InetSocketAddress(ip, port), connectionTimeout);
  rtspSocket.setSoTimeout(readTimeout);

  // NullPointerException on next line
  bufStream = new BufferedInputStream(rtspSocket.getInputStream());
}

Трассировка стека выглядит следующим образом:

java.lang.NullPointerException
at java.io.FileInputStream.<init>(Unknown Source)
at java.net.SocketInputStream.<init>(Unknown Source)
at java.net.PlainSocketImpl.getInputStream(Unknown Source)
at java.net.Socket$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.Socket.getInputStream(Unknown Source)
at my.code.shown.above()

Мой Google-фу исправил эту ошибку с апреля 2000 года и эту ошибку с ноября 1997 года , но я не уверен, что они применимы. Я также пробежался по коду обновления 7 JDK 1.6, против которого строю, и заметил, что это исключение возникает только тогда, когда FileDescriptor, содержащийся в PlainSocketImpl, равен нулю. Затем это значение передается в конструктор FileInputStream из конструктора SocketInputStream.

Кроме ловли NPE и исключения IOException, я могу здесь что-то сделать? Я подозреваю, что это вызвано каким-то IOException, который устанавливает FileDescriptor на ноль. Было бы намного проще, если бы вместо этого было сгенерировано исключение IOException!

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Первая ошибка выглядит очень актуальной. Второй, не очень, и он был решен путем добавления shutdownOutput () много лет назад.

0 голосов
/ 13 июля 2011

Если вы подозреваете ошибку в JVM, я бы попробовал Java 6 с обновлением 26, а не с обновлением 7. Если это решит проблему, скорее всего, это ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...