流线程Null指针错误

时间:2012-03-27 23:33:52

标签: java android

我目前在线程中从流中检索对象时遇到问题。我目前正在尝试从流中读取一个空指针错误。输入流在服务类中实例化,因此只需要一个应用程序连接。任何人都可以看到是否有任何明显的原因,为什么我得到一个空指针错误。

@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)

2 个答案:

答案 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