概率空指针异常问题

不知道各位大侠遇到过此类问题没有:具体现象是在我的应用里操作操作着就出现了空指针异常,然后程序崩溃退出,关键是这空指针总是概率出现;

出现问题的位置我已经找到,并且进行了空指针的判断,但是还会出现,现在真的是无解了,几乎所有的可能的原因都想到了(变量被回收,服务器返回值为空等),但就是解决不了,求高人指教啊!

有需要的话我会贴出代码,谢谢各位大侠了!


问题补充

问题补充
我总觉得是服务器不稳定,造成了有时我这边发送请求时返回的数据为空,但又没有很好的证据

17个回答

[quote] if (localXcarApp != null && localXcarApp.getBrandInfos() != null && localXcarApp.getBrandInfos().get(brandsIndex) != null) {

brandInfo = localXcarApp.getBrandInfos().get(brandsIndex);

}[/quote]

应该改为
[code="java"] if (localXcarApp != null){
T infos= localXcarApp.getBrandInfos();
if(infos!= null){

brandInfo = infos.get(brandsIndex);

}
}[/code]
这样更合理。
还有检查全局变量localXcarApp 是否是多线程共享安全,其中的数据可能被其他线程修改、删除。还有的可能性就是localXcarApp 中的数据是否用了弱引用,导致虚拟机自动回收。

贴个代码出来 SEE SEE

既然你做了空指针的判断为什么还会出现,不知道你是怎么写的代码,贴出来看看。

你是不是web应用?不会有“概率出现”这种灵异现象的,估计是不同的上下文导致null。

调试一下看看

[quote]出现问题的位置我已经找到[/quote]
我觉得应该还有其他地方有空指针

[quote]造成了有时我这边发送请求时返回的数据为空[/quote]
这个对返回的数据不处理的么?

你的这段代码是线程安全的嘛。你是不是在别的什么地方将application里的东西清空了,比如通过application.setAttribute("xxx",null);这样清空了。web程序的一个请求就会对应一个线程,极有可能是在别的请求里面清空的。从你贴出的代码看不出什么,以上是我的猜想,你检查检查。

[quote]返回的数据是json格式的,我这会对其进行读取,然后保存在map中,最后显示在页面上,有的时候在页面切换的时候map里的值就为空了.......[/quote]
我觉得就上面那段代码本身没啥问题,有没有可能在其他地方也操作了这个localXcarApp和brandInfos变量?这个应该检查下。。。。

切换页面的时候map清空了倒是很诡异。。是不是切换的时候干了啥事情了或者重新new了一次map?。。。map是放在哪儿的呢?

[quote] if (localXcarApp != null && localXcarApp.getBrandInfos() != null && localXcarApp.getBrandInfos().get(brandsIndex) != null) {

brandInfo = localXcarApp.getBrandInfos().get(brandsIndex);

}
[/quote]
我觉得这段代码可能出现空指针的地方有两种情况:
1、brandsIndex是包装类型而且值为空。
2、多线程环境,在判断过程之间或者判断完成和取的过程之间,别的线程把值改成null了。
楼主确定空指针的位置就是这吗?

麻烦问下brandInfos 是个Map? 如果是用的什么Map啊? HashMap? 还是TreeMap?

共17条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问