Я получаю исключение 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!