一个全是bug的项目,调错详解

来源:互联网 发布:compareto方法比较数组 编辑:程序博客网 时间:2024/05/21 13:21

   先下载这个问题项目  下载调试项目

涉及的技术:  java,swt,oracle,jdbc


在这篇文章中,你将学到一些常见或者说坑的错误解决,有什么问题欢迎留言!

先导入这个项目

  1. 缺少jar包

导入后就会报错:,这里很简单,去除swing2swt.jar,这是个多余的包.

去除包后报错如下:

这种类是jre所拥有的,所以是缺少jre包,导入jre或者jdk即可

知识点:一个项目上出现红色感叹号十有八九是包找不到,删除并正确导包(如果需要的话)



2.配置文件问题

表面没有问题了,尝试运行项目,报错如图:这里只显示部分错误
不难发现是MyPro类的构造函数中is变量为空,就说明没有找到db.properties文件
解决:将db.properties文件移至src

知识点:1.错误信息是栈式打印,所有最上面的错误就是最根本错误,当然别人的写的基本不会错误,主要看自己写的类
2.如果有Cause by (如截图),报错已经说得很清楚,是由于这个原因造成的
3.这里使用的方法(getResourceAsStream)会去工程的目录下找文件,即src下,


3.找不到类

尝试运行,报错如下:这里只显示部分错误

这里是个小坑,ojdbc工具包竟然没加载到项目,在swt文件下把ojdbc14加载


知识点:出现类找不到,可能有两种原因:(1)类名写错了;(2)没有导包


4.无法获得数据库连接(调用中无效的参数)

尝试运行,报错如下:这里只显示部分错误(下面就不赘述这句话了)

这里是个巨坑,这个百度上都没个好的答案,dubug也达不到这个位置

错误定位在DpHelper类的36行错误,这里用了这个方法 java.sql.DriverManager.getConnection(String url, Properties info),从API中看出,使用这种方法,用户名和密码的格式一定是这样的:user,password.而项目中配置文件的是username,password,导致该方法找不到一个用户.

解决:(1)把配置文件中的username改成user即可

(2)或者使用另一个getConnection方法,类似于加载url一样加载username和password


知识点:getConnection(String url, Properties info),方法要求数据格式是user,password


5.参数问题

尝试运行,报错如下

这个错误百度上也不能好的解决

来!debug!,会发现是设值方法(setParams)出错,会发现,循环只执行了一次,明明有两个参数,说明第二个参数有问题,这也验证了报错说参数2出错,再看循环结束条件i<len,而i又从1开始,所以会少一次,

修改有两种方法:(1)  i  从0开始,  代码修改为pstmt.setObject(i+1,params[i]);  

(2) i<=len, 代码修改为pstmt.setObject(i,params[i-1]);

setObject,这个方法 ,下标1 表示第一个参数,我也不知道为什么, 说好的0才是第一个参数呢,估计他们脑残!


知识点: debug是个好东西,要学会使用,


6. sql错误(未明确定义列)

至此,终于能登录了(当然,数据库你要创建好,还要记得commit).

当点击"学生信息管理"时,报错如下:

错误定位在YcStuInfoDao类的14行,这里的sql语句直接在PLSQL Developer之类的软件中使用也是会报错的

修改:把cid修改为c.cid即可

知识点:1.当联表查询时,同一个字段几个表同时拥有时,却没指定哪个表的字段时就使用,就会报这样的错

2.在使用sql语句时,建议在PLSQL Developer之类的软件中能正确使用了后再放到项目中使用


7.数据在swt中显示错误(学生班级为null)

如图:

既然数据显示了,说明数据是取到了,通过dubug可以发现,班级列的名字没有重命名,

解决:加上重命名即可,YcStuInfoDao类的24行,第二个字段后加上cname,可以看看其他方法的写法


知识点:如果一个数据都不显示,较大的可能是数据根本没取到,如果只是部分数据没有,较大可能是数据显示问题


8.空指针异常

"学生信息管理"有子列表,如果不点击这个按钮,直接打开其下的子列表,就会报错,如图:


通过代码分析,需要打开的窗口没有实例化

解决:在StuSysManager类的177行前加上判断,如果StaticObject.showStuInfo面板为空null就不操作(return)

(这样做用户不能直接打开子列表的内容了,这只是不报错了,对系统的友好性来说,这是不可取的,)

知识点:对代码读解读能力要高,也可以用debug来发现问题


9.swt界面的不显示

在学生信息界面右键后可以添加学生信息,但是却没反应,也不报错
问题定位在ShowStuInfo方法的75行,对于一个swt界面要显示需要用到layout()方法,显示这里缺少一个
解决:查看项目后需要添加一句代码:StaticObject.stuInfo.layout();

知识点:界面不显示,要么是没有这界面,要么就是没打开这界面


10.sql错误(列在此处不允许)

当试图去添加学生信息时报错,如图:

查看sql语句后,发现使用序列的单词错误了,

解决:将seq_YcStuInfo_sid.netval改为seq_YcStuInfo_sid.nextval


知识点:这是关于sql常见的错误,就是参数的问题


11.sql错误(无效数字)

当试图去添加学生信息时报错,如图


查看数据库和sql后,断言cid出错,只有cid是数字类型,往前找cid哪来的,这里推荐一个好用的快捷键,ctrl+alt+h,可以追踪你选中的方法/变量使用情况  ,更多快捷键使用

错误定位在AddStuInfo类的116行,截取了cid但是没重新赋值给cid,因为界面上的cid不全是我们想要的数据,

解决:只要把截取的结果赋值给cid即可


知识点:合理的推论会加快你找错的速度,擅用快捷键会让你更快的定位错误


12.添加学生时,无法添加图片

在添加学生照片时,无法选中图片(就是不给你选)
肯定是被过滤了
错误定位在AddStuInfo类的96行,
解决:将".gif*"删除就行,


13.无法显示学生的照片

好不容易能添加了,却不能显示学生图片了,其他数据有,就是图片没有,这个问题与问题7类型

错误定位在ShowStuInfo类的91行,

解决:key写错了,将pohto该为photo即可



错误仍在寻找与调试中......


如果有什么疑问,欢迎留言!



1 0
原创粉丝点击