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



所以,我有一个this ObjectInputStream,大部分时间将为空。(这是一个聊天服务器。)我认为这段代码可以处理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)

我错过了什么明显的东西吗?

假设在这一行抛出异常:

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

有且只有3个可能的原因。

  1. JavaChat为变量或常数,为null。(不太可能,因为这将是一个巨大的Java风格违反JavaChat是一个类名以外的任何东西。)

  2. JavaChat.connection的值为null

  3. JavaChat.connection.oInStream的值为null

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

一旦你找到了null工作回到它来自哪里…为什么。


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

相关内容

  • 没有找到相关文章

最新更新