我目前在线程中从流中检索对象时遇到问题。我目前正在尝试从流中读取一个空指针错误。输入流在服务类中实例化,因此只需要一个应用程序连接。任何人都可以看到是否有任何明显的原因,为什么我得到一个空指针错误。
@Override
public void run() {
try {
while(true){
while ((mess = (com.DrawTastic.Message) messRec.readObject()) != null) {
runOnUiThread(new Runnable() {
public void run() {
mAdapter.add(mess);
}
});
}
}
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
错误跟踪:
03-27 23:08:10.800: ERROR/AndroidRuntime(2218): FATAL EXCEPTION: Thread-13
03-27 23:08:10.800: ERROR/AndroidRuntime(2218): java.lang.NullPointerException
03-27 23:08:10.800: ERROR/AndroidRuntime(2218): at com.DrawTastic.ChatActivity.run(ChatActivity.java:149)
03-27 23:08:10.800: ERROR/AndroidRuntime(2218): at java.lang.Thread.run(Thread.java:1019)
答案 0 :(得分:2)
我认为mess必须是一个类级别的字段,否则这将无法编译。但基本上,你构造的所有Runnable
共享相同对mess的引用,其中......在循环结束时为null。
相反,最好将mess
复制到本地最终变量:
final Message thisMess = mess;
runOnUiThread(new Runnable() {
public void run() {
mAdapter.add(thisMess);
}
});
...假设它是异步运行的,我不太了解Android。
答案 1 :(得分:1)
或者mAdapter
可能是null
。