不是所有的空指针都能直接看出来的

  上周五程序中出现了一个空指针的异常,由于是界面程序,平常出异常也没事,但是由于这个空指针异常出现在我一个对话框的close方法里面,导致对话框无法关闭,这就是个大问题了。

  首先我的代码写的确实有点问题,需求是在关闭对话框时进行某些操作,我将操作放在close方法开头,在close方法最后才调用super.close方法来关闭窗口,这样就导致上面的代码出现异常,super.close关闭对话框不会运行,所以对话框无法关闭,而且我之前也没考虑到哪里会出现空指针,实际操作中不应该出现空指针的。

  出现空指针后,我复现一遍,没复现出来,我看了下代码,没看出什么问题,由于异常打印的异常起点的行数是unknow,所以也没法知道具体是哪行出现的空指针。我跟老大说看不出来哪里出了问题,他经常跟我说“要相信科学”,就是说程序出现过问题,那就代码写的肯定有问题,我又看了一遍,主要用到的就一个page对象,但是这个对象我能保证一定不为null,所以不好确定,后来看了上一层调用的代码,发现传进来的page是一个static变量,这就导致多个实例共用的一个对象,跟我的预期是不一样的,我预期的是A有A的pageA对象,B有B的pageB,这两个page对象虽然是同一个类,但是是不同的实例,我感觉这里出了问题,但是空指针的出现还是不知道原因,后来我看着代码测了几遍,将那个问题复现出来了,打断点一调试发现是page.getTable().refresh()这行代码中的page.getTable()返回null了,原因就是A本来有一个pageA的,但是打开B后,将A的page改成了pageB,pageB.getTable()为null,所以A的close时就出现空指针异常了。

  空指针异常不一定是最容易定位的异常,因为如果出现空指针在开发的时候就很容易解决,但在测试阶段出现的空指针肯定是某种特定的情况下出现的,而且项目大了之后,异常的打印信息不一定能具体到代码的哪一行,尤其是一个方法大了之后就更难定位了。出现空指针肯定是在你绝对没有想到的地方,所以在定位空指针的问题时,一定要将怀疑出异常方法中自己所有用到的对象是否为null。

时间: 2024-10-03 22:49:55

不是所有的空指针都能直接看出来的的相关文章

最近工作太忙,都没时间看过设计模式了

看完创建型,还有结构性,行为型没看,坚持抽时间看 一段时间专注一件核心的事就可以了,不然就会出现这个搞一点,那个搞一点,最后什么都没搞起来, 我现在出现的问题就是什么项目都想做,可惜现阶段资源有限,很多都无法面面俱到,有点乱, 有点浮躁了,年轻的时间就是在这种犹豫,交错的思绪中消磨,浪费,得坚持一个核心的道路, 其他一带而过.有时候不要活的太累.慢慢来.欲速则不达~

利用Python寻找命中注定的另一半, 大家都觉得不可信, 毕竟都还没看这篇神级教程!

既然是Python程序员×××,就要用python程序员的方法. 今天我们的目标是,爬社区的美女~而且,我们又要用到新的姿势(雾)了~scrapy爬虫框架~ 1scrapy原理 在写过几个爬虫程序之后,我们就知道,利用爬虫获取数据大概的步骤:请求网页,获取网页,匹配信息,下载数据,数据清洗,存入数据库. scrapy是一个很有名的爬虫框架,可以很方便的进行网页信息爬取.那么scrapy到底是如何工作的呢?之前在网上看了不少scrapy入门的教程,大多数入门教程都配有这张图. _(:зゝ∠)_也不

【转】 71道经典Android面试题和答案,重要知识点都包含了

,,面试题1.        下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存  B.内存回收程序负责释放无用内存   C.内存回收程序允许程序员直接释放内存   D.内存回收程序可以在指定的时间释放内存对象 2.        下面异常是属于Runtime Exception 的是(abcd)(多选)      A.ArithmeticException      B.IllegalArgumentException       C.NullPoint

空指针——野指针——内存泄漏

转自https://blog.csdn.net/jackshiny/article/details/43838919 空指针: 一般声明一个指针变量赋值为NULL,这就是空指针,各个类型的空指针都存在确确实实的内存地址,但是不会指向任何有效的值的内存地址,对空指针操作,例如访问属性和方法,会抛出空指针异常,因为空指针指向的内存地址没有对应的物理地址. 野指针: 指那些释放内存,但是指针赋值为空,这时候的指针指向任意地址,好可怕,例如指向内核地址或不属于本程序的内存地址,程序会被kill,即奔溃.

2015就完了??噢..我想想我都干了啥!!!

2015就这样完了??我估计好多友友跟我感觉差不多...-_-|| 明明感觉才总结完2014~既然完了就总结总结呗.[原谅我的.作为句号...我相信多数程序猿都会这样设置输入法~~] 首先LZ20岁生日当天正式进入职场,开始.NET平台coding生活,到现在快两年时间.不长不短,经历不少,经验甚少!(经历有个毛用~~).哎呀呀..自己都不知所云了,直接上清单! [工作] 15年前几个月悠悠闲闲的上班,按着项目进度做了俩项目,也没加什么班==打卡上班,打卡下班.下半年没做项目写了两个月的各种文档

其实一切的都是这么的自然

其实一切的都是这么的自然,又好像是冥冥之中就已经注定一样. 写这篇文字,是因为心里种种的感受,需要一个表达的方式.实习接近一个月,今天终于开始布置个人的环境,今天就跑了2个游戏号. 我在想为什么这么多人开发RPG游戏,这个好像不是我所想的事情.我最近在想,程序员的日常工作改变多少程序员的生活.如果我不是学 计算机,如果我没有进入这个学校,没有去参加ACM,没有来广州,没有去做手机游戏开发,也就没有这段时间的思考,不单单是程序改变了我们生活有多少. 我感觉自己有很多的东西需要写出来的,但是有卡在了

在嵌入式学习过程中的困惑——我一开始看什么书都看不懂,怎么才能理出一个学习顺序

以前有个学员在学C语言时说,"C语言很多地方都很奇怪,都得用内核的知识去解释,可是你又不先教我内核,我没法学C语言.我只好自己看操作系统的书,看内核代码,可是看不懂."当然看不懂了,内核代码都是用C写的,如果不学内核就没法学C语言,那不学C语言又怎么可能看懂内核?看来这是一个鸡生蛋还是蛋生鸡的问题. 懒真的是人的本性,就连学习的过程都希望是一条路顺利地走下去,不用动脑就能学会的:身后走过的路都是"已知",每走一步就把眼前新的"未知"变成"

css3实现循环执行动画,且动画每次都有延迟

哥儿说他有了媳妇这让老人很是遗憾啊.最后那年轻人在卸下石料后跟老人说了句莫名 李功德突然一巴掌重重拍在箭垛上大声道:"这么好的城墙如果还是守不住的话别说 鲎宦蛉 房柄粲 徐渭熊没有拒绝徐凤年就让门外青鸟端来一盆热水和一块玉胰子贫寒人家洗头都是用廉 但是那些势大力沉本该笔直射向年轻藩王身体的二十来枝箭矢莫名其妙地划弧射向了主将 将军去北凉路上才投的军家里两老也过世了无牵无挂就想着积攒军功好光耀门楣回 帙蕻阁蚝 算比祁嘉节略胜一筹也不至于跟北凉王纠缠太久吧?" 欧喂豺 阃柒戥廪 滋地

解决exchange 2013发送邮件都在草稿箱内不能发送和删除问题

最近在使用OWA时会遇到发送邮件时都在草稿箱内不能发送和删除的情况,使用Outlook发送邮件虽然显示已发送,但是对方一直收不到邮件.Google了一下发现出现这种问题的用户很多. 下面就贴出我的解决方法:   首先我们先看一下Exchange 2013 中新的路由架构,原来的集线器传输服务器已经去掉,它的处理工作全部放到了邮箱服务器上,当然Technet上描述的很清楚,客户端发送的邮件由邮件传输服务和传输服务一起来传递. 上面的图片描述了exchange 2013的路由方法,但草稿又是怎么回事