请教关于线程的一个问题

李狗蛋52635 2012-04-26 10:07:36
各位好

以下是我写的一段代码,很神奇的是,在被标记的那一行,有时会报出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");
}


请各位畅所欲言,先谢谢了。
...全文
105 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
auroradad 2012-04-26
  • 打赏
  • 举报
回复
也有可能不是sender为NULL,而是run方法中某个变量是NULL。
提供的信息太少,无法确定准确的原因。
李狗蛋52635 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

我这里的sender是一个private的,别的任何地方都没有用到它的啊。
李狗蛋52635 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

我这里的sender是一个private的,别的任务地方都没有用到它的啊。
安特矮油 2012-04-26
  • 打赏
  • 举报
回复
如果sender是公用的对象,完全就有可能
李狗蛋52635 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

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

这位仁兄说得对,的确是run()方法里一个变量为空了所导致的,代码如下:

try
{
version = ServerService.sService.XXXXX
}
catch (RemoteException e)
{
e.printStackTrace();
}


其中这个sService是个公用的变量,是它为null了而导致的。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧