【问题标题】:Java: How to avoid NullPointerException when reading from a stream? [closed]Java:从流中读取时如何避免 NullPointerException? [关闭]
【发布时间】:2014-08-20 00:40:12
【问题描述】:

所以,我有一个这个 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)

我在这里遗漏了什么明显的东西吗?

【问题讨论】:

  • 请发布NPE,并附上完整的回溯和它指向的部分代码。
  • 这是它指向的代码部分。
  • @TheQuickBrownFox 你能改写一下吗?已经很晚了,这些话对我来说没有任何意义。
  • @HCBPshenanigans 发布 StackTrace
  • 如果它那一行,那么JavaChatJavaChat.connectionJavaChat.connection.oInStream 之一的计算结果为null。无论如何,请参阅stackoverflow.com/questions/218384/…

标签: java sockets exception serialization stream


【解决方案1】:

假设在这一行抛出了异常:

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

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

  1. JavaChat 是一个变量或常量,它是null。 (不太可能,因为 JavaChat 不是类名,这将是一个巨大的 Java 风格违规。)

  2. JavaChat.connection 的值为null

  3. JavaChat.connection.oInStream 的值为null

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

一旦你找到了 null 的工作,就回到它的来源......以及为什么。


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

【讨论】:

  • 我可以保证 JavaChat.connection 不为空,所以听起来我需要仔细检查 3。
猜你喜欢
  • 1970-01-01
  • 2010-09-21
  • 2014-07-07
  • 1970-01-01
  • 2012-07-01
  • 1970-01-01
相关资源
最近更新 更多