各位好以下是我写的一段代码,很神奇的是,在被标记的那一行,有时会报出NULL指针错误。有人告诉我说可能是线程异步,导致在if的时候是非空,然后进入执行块的时候,由于某些原因,变成空了,这可能吗?
if (sender != null && !sender.isAlive())
{
sender.run();  <===标记
Log.i(TAG_LISTENER, "$ServerSender back to running");
}
else if (sender == null)
{
sender = new ServerSender(serverSocket);
sender.start();
Log.i(TAG_LISTENER,
"$ServerSender started in ServerListener");
}
请各位畅所欲言,先谢谢了。

解决方案 »

  1.   

    如果sender是公用的对象,完全就有可能
      

  2.   


    我这里的sender是一个private的,别的任务地方都没有用到它的啊。
      

  3.   


    我这里的sender是一个private的,别的任何地方都没有用到它的啊。
      

  4.   

    也有可能不是sender为NULL,而是run方法中某个变量是NULL。
    提供的信息太少,无法确定准确的原因。
      

  5.   


    这位仁兄说得对,的确是run()方法里一个变量为空了所导致的,代码如下:try
    {
    version = ServerService.sService.XXXXX
    }
    catch (RemoteException e)
    {
    e.printStackTrace();
    }
    其中这个sService是个公用的变量,是它为null了而导致的。