所以,我有一个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个可能的原因。
JavaChat
为变量或常数,为null
。(不太可能,因为这将是一个巨大的Java风格违反JavaChat
是一个类名以外的任何东西。)JavaChat.connection
的值为null
JavaChat.connection.oInStream
的值为null
你的问题中没有足够的信息来区分这些原因。下一步应该仔细检查源代码,看看哪些解释在您的程序上下文中是可能的。如果这(和一些逻辑!)没有帮助,那么使用调试器或跟踪打印来确定这些值中哪个是null
。
一旦你找到了null
工作回到它来自哪里…为什么。
调试程序的最好方法是理解源代码并应用逻辑推理。