问题描述
不知道各位大侠遇到过此类问题没有:具体现象是在我的应用里操作操作着就出现了空指针异常,然后程序崩溃退出,关键是这空指针总是概率出现;出现问题的位置我已经找到,并且进行了空指针的判断,但是还会出现,现在真的是无解了,几乎所有的可能的原因都想到了(变量被回收,服务器返回值为空等),但就是解决不了,求高人指教啊!有需要的话我会贴出代码,谢谢各位大侠了!问题补充问题补充我总觉得是服务器不稳定,造成了有时我这边发送请求时返回的数据为空,但又没有很好的证据 问题补充:算是web应用吧,大部分的内容都是从网络上时时调取的,不同的上下文会导致NULL没太明白.......<div class="quote_title">chen_yongkai 写道</div><div class="quote_div">你是不是web应用?不会有“概率出现”这种灵异现象的,估计是不同的上下文导致null。</div><br />
解决方案
引用 if (localXcarApp != null && localXcarApp.getBrandInfos() != null && localXcarApp.getBrandInfos().get(brandsIndex) != null) { brandInfo = localXcarApp.getBrandInfos().get(brandsIndex); }应该改为 if (localXcarApp != null){ T infos= localXcarApp.getBrandInfos(); if(infos!= null){ brandInfo = infos.get(brandsIndex); } }这样更合理。还有检查全局变量localXcarApp 是否是多线程共享安全,其中的数据可能被其他线程修改、删除。还有的可能性就是localXcarApp 中的数据是否用了弱引用,导致虚拟机自动回收。
解决方案二:
ArrayList有一种空是这样的[null],你判断没呢?
解决方案三:
if (localXcarApp != null && localXcarApp.getBrandInfos() != null && localXcarApp.getBrandInfos().get(brandsIndex) != null) { brandInfo = localXcarApp.getBrandInfos().get(brandsIndex); } 你的hashmap 是在多线程下应用,出现空指针应该说是正常的。确认一下你数据在多线程情况下的安全。
解决方案四:
正规的处理异常语句应该是try-catch-finally,这里应该使用,否则可读性太差,也不利于问题定位。关于异常位置,上面已经有人说了,brandsIndex,如果为空,就是空指针异常,如果越界,就是数组越界异常,用catch可以帮助定位问题。try{brandInfo = localXcarApp.getBrandInfos().get(brandsIndex);}catch(NullpointerException ne){//处理空指针异常}catch(Exception e){//处理其它异常}finally{//收尾工作}抓到异常,看stacktrace就知道从哪里来,是什么问题。
解决方案五:
从你贴出来的代码,理论上是有可能抛出数组越界的异常的;localXcarApp是全局变量吗?是在你页面变换的时候才会抛出空指针吗?是不是每次页面变换都会对 localXcarApp全局变量进行赋值?这个方法是不是执行的条件是什么?
解决方案六:
切换页面时,indent 也切换了。既然是切换页面时报错,那应该 localXcarApp 是被定义成线程共享了。
解决方案七:
如果brandsIndex是Integer类型的, 可以检查下它是不是有可能为空。
解决方案八:
检查有没有超时的因素,试试增大应用的内存能不能解决问题
解决方案九:
麻烦问下brandInfos 是个Map? 如果是用的什么Map啊? HashMap? 还是TreeMap?
解决方案十:
引用 if (localXcarApp != null && localXcarApp.getBrandInfos() != null && localXcarApp.getBrandInfos().get(brandsIndex) != null) { brandInfo = localXcarApp.getBrandInfos().get(brandsIndex); }我觉得这段代码可能出现空指针的地方有两种情况:1、brandsIndex是包装类型而且值为空。2、多线程环境,在判断过程之间或者判断完成和取的过程之间,别的线程把值改成null了。楼主确定空指针的位置就是这吗?
解决方案十一:
引用返回的数据是json格式的,我这会对其进行读取,然后保存在map中,最后显示在页面上,有的时候在页面切换的时候map里的值就为空了.......我觉得就上面那段代码本身没啥问题,有没有可能在其他地方也操作了这个localXcarApp和brandInfos变量?这个应该检查下。。。。切换页面的时候map清空了倒是很诡异。。是不是切换的时候干了啥事情了或者重新new了一次map?。。。map是放在哪儿的呢?
解决方案十二:
你的这段代码是线程安全的嘛。你是不是在别的什么地方将application里的东西清空了,比如通过application.setAttribute("xxx",null);这样清空了。web程序的一个请求就会对应一个线程,极有可能是在别的请求里面清空的。从你贴出的代码看不出什么,以上是我的猜想,你检查检查。
解决方案十三:
引用出现问题的位置我已经找到我觉得应该还有其他地方有空指针引用造成了有时我这边发送请求时返回的数据为空这个对返回的数据不处理的么?
解决方案十四:
调试一下看看
解决方案十五:
你是不是web应用?不会有“概率出现”这种灵异现象的,估计是不同的上下文导致null。
其他方案:
既然你做了空指针的判断为什么还会出现,不知道你是怎么写的代码,贴出来看看。
其他方案:
贴个代码出来 SEE SEE