从Socket.getInputStream()抛出NullPointerException

时间:2011-07-13 07:46:07

标签: java sockets nullpointerexception

我很少在此代码中引发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 2000this bug from Nov 1997,但我不相信它们适用。我也在浏览我正在构建的JDK 1.6 update 7代码,并注意到只有FileDescriptor中包含的PlainSocketImpl为空时才会引发此异常。然后,此值将从FileInputStream构造函数传递到SocketInputStream构造函数。

没有捕获NPE并抛出IOException,我能在这做些什么吗?我怀疑这是由某种IOException引起的,它将FileDescriptor设置为null。如果抛出IOException会更容易!

2 个答案:

答案 0 :(得分:1)

第一个错误显得非常相关。第二个,不是这样,而且很多年前通过添加shutdownOutput()解决了这个问题。

答案 1 :(得分:0)

如果您怀疑JVM中存在错误,我会尝试Java 6更新26而不是更新7.如果这样可以解决问题,那么它可能是一个错误。