我很少在此代码中引发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-fu已提升this bug from Apr 2000和this bug from Nov 1997,但我不相信它们适用。我也在浏览我正在构建的JDK 1.6 update 7代码,并注意到只有FileDescriptor
中包含的PlainSocketImpl
为空时才会引发此异常。然后,此值将从FileInputStream
构造函数传递到SocketInputStream
构造函数。
没有捕获NPE并抛出IOException,我能在这做些什么吗?我怀疑这是由某种IOException引起的,它将FileDescriptor设置为null。如果抛出IOException会更容易!
答案 0 :(得分:1)
第一个错误显得非常相关。第二个,不是这样,而且很多年前通过添加shutdownOutput()解决了这个问题。
答案 1 :(得分:0)
如果您怀疑JVM中存在错误,我会尝试Java 6更新26而不是更新7.如果这样可以解决问题,那么它可能是一个错误。