有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从socket引发的java NullPointerException。getInputStream()

我在这段代码中很少遇到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,但我不相信它们适用。我还浏览了我正在构建的JDK1.6UPDATE7代码,注意到只有当PlainSocketImpl中包含的FileDescriptor为空时才会引发此异常。然后将该值从SocketInputStream构造函数传递到FileInputStream构造函数

除了捕获NPE和抛出IOException之外,还有什么我可以做的吗?我怀疑这是由某种IOException导致的,它将FileDescriptor设置为null。如果改为抛出IOException,会容易得多


共 (2) 个答案

  1. # 1 楼答案

    如果您怀疑JVM中有错误,我会尝试Java6Update26而不是Update7。如果这解决了问题,很可能是一个bug

  2. # 2 楼答案

    第一个bug似乎非常相关。第二个问题并非如此,多年前通过添加shutdownOutput()解决了这个问题