Java:从流中读取时如何避免NullPointerException?

时间:2014-08-20 00:40:12

标签: java sockets exception serialization stream

所以,我有一个这个ObjectInputStream,大部分时间都是null。 (这是一个聊天服务器。)我认为这段代码将处理空条件。 (这是它自己的线程,所以它不会阻止程序的其余部分。我重写的先前解决方案是发送对象,而不是字符串,用来阻塞它直到它得到了什么。我是寻找一种有类似行为的方法。)

当程序运行时,我在这里得到一个空指针异常。 (因为该值显然为null!)如何让流等待它收到尝试并读取的内容? (或者继续尝试直到它得到的东西不是空的?)。

     while((message = (Message)JavaChat.connection.oInStream.readObject()) != null)
     {
         // ...do some stuff...
     }

编辑:堆栈跟踪。 (似乎有点短暂没有?)

java.lang.NullPointerException
    at javachat2.IncomingReader.run(IncomingReader.java:33)
    at java.lang.Thread.run(Thread.java:745)

我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:2)

假设在此行中抛出异常:

while((message = (Message) JavaChat.connection.oInStream.readObject()) != null)

只有3种可能的原因。

  1. JavaChat是变量或常量,它是null。 (不太可能,因为JavaChat除了类名之外的其他任何东西都会违反巨大的Java风格。)

  2. JavaChat.connection的值为null

  3. JavaChat.connection.oInStream的值为null

  4. 您的问题中没有足够的信息来区分这些原因。您的下一步应该是仔细检查您的源代码,以查看在您的程序环境中哪些解释是可能的。如果那(和某些逻辑!)没有帮助,那么使用调试器或跟踪打印来确定哪些值是null

    一旦你发现null工作倒退到它来自哪里......以及为什么。


    调试程序的最佳方法是了解源代码并应用逻辑推理。