有空指针异常

有空指针异常

上次给老师检查过了,老师跑我的代码没毛病,但是我自己的会报空指针或者输入为空。原来以为是c3p0的配置出了问题,但是经过修改之后欧仍然是这个问题。另外,想问一下,为什么浏览器上的页面跳转的那么快,我的idea那么慢。。。有什么区别么

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

8回答
好帮手慕阿满 2020-07-16 12:07:04

同学你好,不理解同学所说的“执行”是什么意思。

debug的步骤如下:

1、在可能出现问题的地方打上断点。

2、使用debug方式启动项目。

3、启动项目后,访问某个路径,如果执行到断点位置处,程序会暂停,按F8一步一步执行,在debugger窗口查看变量信息。

例如:

在UserDaoImpl类中打上断点,

http://img1.sycdn.imooc.com//climg/5f0fd06609f19fee10560360.jpg

使用debug启动项目,

http://img1.sycdn.imooc.com//climg/5f0fd07d09a03ef703400078.jpg

启动项目后访问http://localhost:8080/top_war_exploded/login.jsp页面,输入用户名和密码等,点击登录提交。

http://img1.sycdn.imooc.com//climg/5f0fd0d1091d042004780454.jpg

程序执行到断点位置处暂停,按F8一步一步执行。

http://img1.sycdn.imooc.com//climg/5f0fd16609bb07f412050726.jpg

Debugger窗口可以查看变量信息。按F8单步调试,或者按如下按钮单步调试,

http://img1.sycdn.imooc.com//climg/5f0fd1c109b2efca09320233.jpg

字段是id,但是仍然报空指针异常,建议同学查看一下登录的用户信息是否在数据库中存在。

祝:学习愉快~

好帮手慕阿满 2020-07-15 19:08:58

同学你好,debug启动项目后,就会执行项目。执行到断点位置处会暂停,然后F8,一步一步执行。

祝:学习愉快~

  • 提问者 慕函数4736799 #1
    比如我在“执行”这一块从头至尾打了断点,那一下子就执行完毕了?再按f8就执行//执行 之后的?
    2020-07-15 19:15:56
  • 提问者 慕函数4736799 #2
    我看到的是service栏,总感觉这里的信息和第一课程里学的不一样
    2020-07-15 19:16:27
好帮手慕阿满 2020-07-15 15:55:32

同学你好,在catch中,应该使用e.printStackTrace();将错误的堆栈信息打印一下,而不是使用System.out.println()。

debug执行,建议按F8一步一步执行,查看执行到错误位置时,具体是什么报错,然后根据报错具体解决。

蓝色字体是项目运行信息,不是报错。

祝:学习愉快~

  • 提问者 慕函数4736799 #1
    是按f8就开始debug了,而不是按了debug之后按f8
    2020-07-15 18:01:45
提问者 慕函数4736799 2020-07-15 12:56:52


http://img1.sycdn.imooc.com//climg/5f0e8c6b08d0714e10080756.jpg
打了断点,但还是一下子执行到底,没有明确的执行步骤,蓝字是报错信息么?

好帮手慕阿满 2020-07-15 09:49:57

同学你好,IDEA中debug和之前一样,在相应的位置处打上断点,使用debug的方式启动,如:

http://img1.sycdn.imooc.com//climg/5f0e5fcc095ddfc403330097.jpg

然后程序运行到断点位置会停止,按F8,一步一步执行。按F9,跳转到下一个断点位置或者结束dubug执行。

关于报空指针异常的问题,建议同学使用debug的方式,查看一下具体的报错位置以及报错原因。

老师这里的数据库中的字段使用的id,建议同学根据自己的数据库的字段进行对应。

祝:学习愉快~

  • 提问者 慕函数4736799 #1
    我的字段是id,但仍然报错。上面打断点也有些问题
    2020-07-15 12:57:24
好帮手慕阿满 2020-07-13 11:32:44

同学你好,测试同学的代码,报空指针,提示错误在UserServlet类的第36行,如:

http://img1.sycdn.imooc.com//climg/5f0bd2440915c75710690447.jpg

UserServlet类的36行如下:

http://img1.sycdn.imooc.com//climg/5f0bd27e092a6fb811780346.jpg

这里意味着existUser为null,也就是UserService接口的实现类中,login()方法返回值为null,向上追溯,

http://img1.sycdn.imooc.com//climg/5f0bd2d909650c7706500239.jpg

是UserDao接口的实现类中,login()方法的返回值为null。

在UserDaoImpl类中,打上断点,使用debug执行,并在catch中,使用e.printStackTrace();将异常打印,得出如下问题:uid字段不存在。

http://img1.sycdn.imooc.com//climg/5f0bd35609cb0bc013950829.jpg

查看数据库,user表的字段为id,而不是uid。所以抛出异常,最后返回null,造成空指针异常。

建议同学查看一下自己的数据库,字段是否uid,登录的账号是否在数据库中存在等。


根据报错查看错误信息,重点关注报错信息中,提示项目中类的报错,并根据报错定位具体位置,可参考上边查找报错的方式。


正则表达式在二阶段讲过,同学可以再去复习一下。如:

https://class.imooc.com/course/962


祝:学习愉快~



  • 提问者 慕函数4736799 #1
    把getint改成id,仍然空指针异常
    2020-07-14 22:04:32
  • 提问者 慕函数4736799 #2
    idea如何debug
    2020-07-14 22:22:06
  • 提问者 慕函数4736799 #3
    Tomcat的debug和之前的一样么
    2020-07-14 22:22:23
提问者 慕函数4736799 2020-07-13 02:40:32

怎么在控制台看异常,我大概知道是找到一个java开头的句子,但是该怎么确定是哪一行出问题或者哪里出问题我就不知道了。而且,有时候也不止一个java开头的句子,听说会出(8888)几千行的报错,我估计是闸包或工具类里的报错,这个怎么看?怎么能快速具体的找到报错的地方。还有,想知道正则表达式的应用,比如某个网页上的搜索文本框如何和正则表达式联系起来。

提问者 慕函数4736799 2020-07-12 22:50:22

代码太长,邮箱发给老师看看。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师