java调试与排错

参考网址:http://www.doc88.com/p-461115156632.html

一.Java程序调试与错误收集
1.Web程序的调试与排错:尽量使用System.out.println();和打印hql语句的方式跟踪查错
(1).非代码引起的报错
①.jar包引起的错误:当从版本控制器上下载项目时,如果项目报错但是所有类文件
和配置文件和所有手动建的包都没有报错的情况时是因为项目中的jar包有错,修改或删
除jar包即可
②.编译器版本不合报错:当启动服务器或部署项目时控制台打印有:*
java.lang.UnsupportedClassVersionError:Bad version number in .class file的异常语句时是因
为当前MyEclipse使用的jdk版本和项目创建时的jdk版本不合而引起的,进入
MyEclipse>Window>Preferences>点击弹出的对话框左边的树形菜单中的"Java"项下的Comp
iler项>点右边显示框中Compiler compliance level:右边的下拉列表并选择和创
建项目时的jdk版本相同的jdk版本号>点击右下角的"Apply"按钮>点击击右下角的"Ok
"按钮即可
③.当控制台或页面上打印org.apache.jasper.JasperException: The absolute uri:
http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml o
r the jar files deployed with this application的异常语句时,是因为缺少jar包或jar
包版本不对或web.xml配置问题
方法一:在工程中导入JSTL jar包后(把*.jar和*.tld放到/WEB-INF/lib目录下)在
JSP页面中导入<%@ taglib uri="/WEB-INF/lib/c.tld" prefix="c"%>
方法二:修改web.xml(加上下面语句)<jsp-config>

<taglib><taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri><taglib-location>/WEB-INF/tlds/fmt.t
ld</taglib-location></taglib>

<taglib><taglib-uri>http://java.sun.com/jstl/fmt-rt</taglib-uri><taglib-location>/WEB-INF/tlds/fm
t-rt.tld</taglib-location></taglib>

<taglib><taglib-uri>http://java.sun.com/jstl/core</taglib-uri><taglib-location>/WEB-INF/tlds/c.tld
</taglib-location></taglib>

<taglib><taglib-uri>http://java.sun.com/jstl/core-rt</taglib-uri><taglib-location>/WEB-INF/tlds/c-
rt.tld</taglib-location></taglib>

<taglib><taglib-uri>http://java.sun.com/jstl/sql</taglib-uri><taglib-location>/WEB-INF/tlds/sql.tld
</taglib-location></taglib>

<taglib><taglib-uri>http://java.sun.com/jstl/sql-rt</taglib-uri><taglib-location>/WEB-INF/tlds/sql-
rt.tld</taglib-location></taglib>

<taglib><taglib-uri>http://java.sun.com/jstl/x</taglib-uri><taglib-location>/WEB-INF/tlds/x.tld</t
aglib-location></taglib>

<taglib><taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri><taglib-location>/WEB-INF/tlds/x-rt.t
ld</taglib-location></taglib>

</jsp-config>再在JSP文件中导入<%@ taglib uri="/WEB-INF/lib/c.tld"
prefix="c"%>
④.当代码、配置文件和路径都没有错时,但是它总是报以前的错或不出效果,是因
为服务器中任然还 残留 以前的代码,将服务器中的项目彻底删除后重新部署即可
⑤.当两个页面同时访问同一个资源时(),如果代码完全一样但一个可以访问另一
个却不能访问(报404错)时,可能是因为另一个页面中有以下代码:<%String path=request
.getContextPath();String
basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+pat
h+"/";%> <base href="<%=basePa
th%>"> <meta http-equiv="pragma" content="no-cache"> <meta
http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta
http-equiv="description" content="This is my page">
⑥.当访问页面时,如果确认路径和页面都存在却报404错误,关闭服务器再启动试
一试(重启编译器不行),或将项目从服务器上和编译器上删除,重新导入另外备份的同一项
目并重新部署,如果重新部署后报错,则是xml文件配置错误,如果不重新部署后
不报错即可
⑦.404错误解决:当程序出现404路径错误时,如果实在找不到有什么错误,就用鼠
标放到要找的超连接上,再看浏览器最下面的状态栏的路径是否和当前文件的路进相对
⑧.当重新部署项目到服务器时,如果部署完后控制台什么也没有打印并当重新访问项
目的页面时路径和页面都存在却报404错误,关闭服务器再启动试一试(重启编译器不行)
⑨.在浏览器中出现404/400页面,检查Web是否正确部署到服务器及浏览器地址
栏中输入的地址和端口号是否正确还要看项目名>Propertics>MyEclipse>Web>Context root
>Web Context-root右边的名称是否和/项目名一样,Jsp文件只能放在WebRoot
目录下
⑩.在浏览器中出现"无法显示网页"的页面,检查Tomcat服务是否启动和正确运行
及浏览器地址栏中输入的地址和端口号是否正确、再检查是否部署服务器
11.在浏览器中出现500/503页面,说明有语法/逻辑错误,或未打开服务器
12.当服务器无法启动(即:马上启动又马上关闭时)是因为端口一直被另一个程序
占用的原因,可以打开任务管理器结束占用该端口的进程,也可以重启电脑解决该问题
13.部署项目到服务器时发生的错误:当部署项目时,如果部署到某时突然发生错误,
把服务器上现有的项目删除后再重新部署即可

14.MyEclipse中启动Tomcat报Could not find the main class错:(意思是找不到Ant
的主类,原因是MyEclipse中的ANT_HOME指向不对)Window>Preferences>Ant>Runtime>
单击右边显示框中的Classpath标签项>选中其中的Ant Home Entries项>单击右
边的Ant Home按钮将Ant Home Entries的指向改为MyEclipse插件目录(MyEclipse安装盘
符:*\Genuitec\Common\plugins)下的org.apache.ant_1.7.*.v200**\lib
15.当打开/重启编译器(MyEclipse)后项目/代码报错(之前没有报错(重新打开/重启
编译器后报错)或代码和逻辑都没有错,点击错误前面的错误提示图标后提示有Change
Workspace compliance and JRE to 1.5的信息),是因为工作空间配置不对,点击错误前
面的错误提示图标再双击Change Workspace compliance and Jre to 1.5即可

注:当做有Hibernate的项目时,如果程序不报错,逻辑上也找不到不对的地方时,可

将控制台打印的hql语句转换成sql语句后的语句复制到数据库中执行,以检查hql语句的错

(2).代码错误导致报的错
①.当页面/控制台报错时(没有遇到过的错/看不懂的错),先看错误信息中的错误信息来
源于哪个类/方法/哪行代码,在根据那行代码多试几中方法
②.保存时发生的错误:当jsp文件中的内容改变,要保存的时候,要先把第一行的
pageEncoding属性值设置为utf-8,否则将报错不能保存
③.启动服务器报错,可能的错误有:配置文件有错,也可能是JSP页面中的标签有错
(此时它不一定报正在使用的程序的错,有可能报其他程序的错),可以在服务器的webapps
目录下把标签有错的项目删除
④.JavaBean引起的错误:
JavaBean的属性名首字母必须小写,否则即使再dao层、server层和servlet中
可以取得其中的值,在Jsp页面中无论用什么方法都不能取得
⑤.当不出现预想的效果时,如果确认不是浏览器缓存所致,但又找不出错误和原因
并浏览器状态栏左边出现有"网页上有错误"的消息时,双击此消息>单击弹出框中的"显示
详细信息"按钮查看错误(其中的"行"和"错误"说明了错误的位置和原因)
⑥.当在jsp页面中用<c:foreach>和EL表达式不能取到值时,应当首先检查是否导入
c:标签库,再检查JavaBean的所有属性名首字母是否是小写
⑦.当导入一个包报错时,如果包名确认无误且当鼠标放在包名上提示The import
java.... conflicts with a type defined in the same file时,表示声明的类名和导入
的包名冲突
⑧.当控制台出现有java.lang.ClassNotFoundException:的错误时,说明项目找不到
Servlet,可能是web.xml中没有配置或配置错误,如果确认配置没有错但仍然报此错误时
,就把web.xml中对应的Servlet的节点删除,同时也把对应的Servlet删除重新新

⑨.当一个jsp页面要有上传的功能时,要在form表单中加一个
enctype="multipart/form-data"属性,但是在jsp页面的form表单中加了该属性后,该表单中的
所有控件(包括
隐藏表单域)的值在servlet中不能用一般的方法获得,必须加判断那些是普通
控件那些是上传文件的控件,再用别的方法获取,所以这时用作传参数的隐藏表单中的参数
必须加在form表单的action属性中来传递,其方法
是:action="servlet?name=value"(即:这时隐藏表单必须用action代替),这时在servlet中才能用
一般的获取值的方法
获取jsp页面传来的值
⑩.当一个jsp页面跳到servlet后又经过servle逃到另一个jsp页面,页面出现乱码
时,是因为没有在servlet中设置请求流和相应流的编码方式,response.setContentType(
"text/html;charset=utf-8");request.setCharacterEncoding("utf-8");
11.当控制台出现有"...将截取字符串错误..."的错误时,是因为数据库相应字段的数
据长度不够
12.当访问任意一个页面都出现404错误时或当启动Tomcat服务器在控制台打印
相关报错语句时,可能是因为web.xml或其他xml配置文件配置错误也可能是因为导入的jar

冲突.
13.当控制台出现有com.microsoft.sqlserver.jdbc.SQLServerException:到主机的
TCP/IP连接失败。java.net.ConnectException:Connection refused:connect的错误时
,可能是因为数据库的端口号不对,打开SQL Server配置管理器中的SQL Server
2005网络配置中的SQLEXPRESS的协议的TCP/IP中的IP地址项中的所有TCP端口都设置对,
并将其中的活动和已启用项设为是/yes和协议项中的全部侦听、无延迟、已启
用都设为是/yes,再重新启动SQL Server 2005服务中的SQL Server(SQLEXPRESS)即可
14.当从servlet或Action跳到一个查询或修改的页面时,如果报500错误并在控制
台打印javax.el.PropertyNotFoundException:Property ‘PropertyName‘ not found on
type ...,可能是因为目标页面中的<c:forEach>的items的值写成了直接用""引起
的字符串,items的""中应该用EL取值,即应该是items="${List或Object}",或者是EL中
的对象/属性名和javaBean中的不同(应仔细检查)
15.如果在使用<jsp:forward>之前jsp文件已经有了数据,文件执行就会出错
16.当控制台出现有java.lang.SecurityException:class
"org.objectweb.asm.CodeVisitor"‘s signer information does not match signer information of
other c
lasses in the same package的安全异常时,是因为包冲突引起的
17.当控制台出现有com.microsoft.sqlserver.jdbc.SQLServerException:Invalid object
name‘数据库名.dbo.表名/视图名‘错误时,是因为数据库中不存在指定的表名
18.当控制台出现有Could not instantiate bean class [完整的包名+类型]:Constructor
threw exception;nested exception is java.lang.Error:Unresolved compi
lation problem:The 一段报错的语句 cannot be resolved的错误异常时是因为
后台有报错的代码,改正报错的代码即可
19.当控制台/页面报有java.lang.ClassCastException:...的错时,可能是因为数据类型
装换时不对,或javabean封装/转换不对

3.总是在控制台提示"该连接已被关闭"时,是因为dao层的connection被声明为全局的(),
改connection为局部即可

4.当重新部署项目到Tomcat报错或部署项目时选Tomcat不能Finish时,是因为Tomcat的
路径(Window>Preferences>MyEclipse>Application Servers>Tomcat>Tomcat 6.x>Tomcat
home directory、Tomcat base directory、Tomcat temp directory的路径应为Tomcat安装
路径的根目录,即...Tomcat 6.0目录)没有选对

5.Ajax出现的错误:
(1).当控制台出现java.lang.SecurityException:Script names may only contain Java
Identifiers的错误时,可能是因为jsp页面中的<script type="text/Javascript" s
rc="dwr/interface/dwr/aDS.js "></script>代码错误,可以把此代码中的interface/后
的dwr/去掉
(2).当保存web.xml在控制台出现java.lang.reflecst.InvocationTargetException的错误时,
可能是因为web.xml中Ajax配置节点的所有<servlet-name>dwr-invoker</servle
t-name>节点有错,此节点中的dwr-必须有
(3).当控制台出现有警告:Page not found. pathInfo=‘?/?/?.js‘ requestUrl=‘?/?/?.js‘(?代表
***路径)类似的信息时,是因为jsp页面上的<script type="text/Javascrip

t" src="?/?/*.js"></script>代码中的src中的路径错误

6.CVS出现的错误:
(1).不能提交或提交时报错:确认客户端和服务器端是连接上的,或因为MyEclipse上的
版本低于CVS服务器上的版本,则先Update
(2).Update或Commit失败时,首先看计算机是否连接上和服务器端的防火墙是否关闭
(3).当客户端能连接上服务器端(即能ping通并能共享文件)但又不能下载项目
/Update/Commit时是因为服务器端的防火墙没有关闭

7.Hibernate出现的错误:
(1).在New一个数据库连接时,如果新建成功但连接不上数据库,这可能是因为
Connection URL项处输入的连接地址中的端口和数据库名不对,或者在连接时突然弹出一个
标题为
Error的报错窗口并在第二行提示The TCP/IP connection to the host has failed...时,是因
为SQL Server配置管理器/SQL Server Configuration Manager中的(资源管
理窗口中的)SQL Server配置管理器(本地)/SQL Server 2005网络配置/MSSQLSERVER
的协议中的TCP/IP状态为已禁用(TCP/IP状态为已禁用是因为其属性中的协议项的已启
用值为否(应该为是),和IP地址项的已启用值为否(应该为是))
(2).不能将表映射为JavaBean的错误:
①.当生成JavaBean找不到要生成到的项目时,是因为在导如Hibernate jar包时,到
步骤"选DB Drever右边的下拉选项中选创建的数据库连接名称"时没有选择所创建的数据
库连接名称
②.当生成JavaBean不能生成(生成失败)时,是因为项目中没有导入Hibernate jar包
(3).当控制台出现有org.hibernate.MappingException:Unknown entity:entity.JavaBean的
错误时,说明没有在Hibernate.cfg.xml文件中加<mapping resource="entity/Jav
aBean.hbm.xml"/>映射文件的标签
(4).当控制台出现有org.hibernate.id.IdentifierGenerationException:ids for this class must
be manually assigned before calling save():entity.NetBar的错误时
,说明没有把Hibernate.cfg.xml文件中的主键生成器标签<generator
class="assigned"/>中的assigned设为native
(5).当控制台出现有Exception in thread "main"
org.hibernate.HibernateException:/hibernate.cfg.xml not found的错误时,是因为
hibernate.cfg.xml没有放在src的根
目录下,hibernate.cfg.xml文件必须放在src根目录下才可以.
(6).在有多对一的关联映射中,当控制台出现有Exception in thread "main"
org.hibernate.LazyInitializationException: could not initialize proxy-the owning Ses
sion was closed的错误时,是因为没有在多的方的hbm.xml文件的many-to-one节
点中配置lazy="false"属性(lazy是延时加载,值为false时关闭延时加载)
(7).当控制台出现有Exception in thread "main" org.hibernate.LazyInitializationException:
could not initialize proxy - the owning Session was closed的错误
时,说明
(8).当控制台出现有Exception in thread "main"

org.hibernate.PropertyAccessException:exception setting property value with CGLIB
(sethibernate.cglib.use_r
eflection_optimizer=false for more info) setter of entity.Computer.setNetBar的错误时,
说明
(9).当控制台出现有org.hibernate.HibernateException: Illegal attempt to associate a
collection with two open sessions的错误时,是因为dao层所有方法的最后没
有关闭session(即:没有session.close();)
(10).当控制台出现有java.lang.OutOfMemoryError: PermGen space的错误时重启服务器
即可
(11).当执行了dao层的方法返回正确的结果但数据库中的数据仍然没有改变时,可能是
dao层的方法中没有执行事务提交的方法commit();
(12).当控制台出现有... ids for this class must be manually assigned before calling
Hibernate方法():JavaBean所在的包.JavaBean名;nested exception is org.h
ibernate.id.IdentifierGenerationException:ids for this class must be manually
assigned before calling Hibernate方法():JavaBean所在的包.JavaBean名Ca
used by:org.hibernate.id.IdentifierGenerationException:ids for this class must be
manually assigned before calling Hibernate方法():JavaBean所在的包
.JavaBean名at org.hibernate.id.Assigned.generate(Assigned.java:33)的错误时,是因
为JavaBean的映射文件:*.hbm.xml中的id节点中的<generator/>节点的class属
性的值不是native
(13).当控制台出现有org.hibernate.exception.GenericJDBCException:could not execute
query
... ...
Caused by:com.microsoft.sqlserver.jdbc.SQLServerException:只进结果集不支持请求的
操作的错误时,一般出现于分页查询的方法中,是因为传到方法中的排除量或其
它参数小于0(为负数)
(14).当使用Hibernate或Hibernate与其它框架整合时,在执行了save/update/delet/其它
方法后,如果执行结果成功(没有报异常)但是数据库中却没有效果(数据改变),是因为
hibernate的操作只提交到事务中,事务没有将执行结果提交到数据库的原因(即
没有手动配置事务的commit方法(事务可以通过session创建/开始(只要可以调用get/save
/其它方法的对象/方法都可以获得/开始事务)))
(15).当页面/控制台打印
org.springframework.dao.InvalidDataAccessResourceUsageException:could not execute
query;SQL[Hibernate将hql转换后的sql语句];nested
exception is org.hibernate.exception.SQLGrammarException:could not execute query
异常时(说明hql语句是对的,所以才被Hibernate装换为sql语句),是因为java
Bean的映射文件中对应的数据库中的列名不合
(16).当控制台出现有* line 数字 *或* unexpected token: *或* at
org.hibernate.hql.antlr.HqlBaseParser *(HqlBaseParser.java:*)at org.hibernate.hql.ast.Quer
yTranslatorImpl.parse(QueryTranslatorImpl.java:*)或
java.lang.reflect.InvocationTargetException换行
sun.reflect.NativeMethodAccessorImpl.invoke(Nativ
eMethodAccessorImpl.java:39)换行
java.lang.reflect.Method.invoke(Method.java:597)的错误时,是hql语句有错引起的(可能是from

写成了form或select写成了selc
st/slect等)
注1:当页面/控制台报不明错误(从来没有遇到过的并用System.out.println()跟踪都不能
检查出错的地方,或当在不同的地方调用同一个方法时,一个地方能正常调用而另一个
地方却始终报错时)时,先打印出相关的hql语句看是否正确
注2:当控制台/页面打印有java.lang.reflect.InvocationTargetException或
java.lang.NoSuchMethodError:org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr/Rec
ognitionException;Lantlr/collections/impl/BitSet;)V的错误时,是因为hql语句的错误,
先打印相关hql语句,看hql语句是否有正确

8.Struts出现的错误:
(1).struts2出现的错误:
①.当启动服务器或重新部署项目时控制台打印Unable to load
configuration.-include -file:/盘符:/.../.metadata/.me_tcat/webapps/项目名/WEB-INF/classes/st
ruts.xml:8:32异常语句时是因为struts2.xml或拆分后的其它struts2配置文件中
没有头文件
(2).struts1出现的错误
①.当控制台出现有java.lang.IllegalArgumentException: Path Demo.jsp does not start
with a "/" character的错误时,是因为struts-config.xml文件中<forward
name="Demo" path="/Demo.jsp"></forward>处的path属性没有/
②.当控制台出现有javax.servlet.jsp.JspException:Cannot find ActionMappings or
ActionFormBeans collection并页面上出现org.apache.jasper.JasperExceptio
n:An exception occurred processing JSP page/*.jsp at line *的错误时,是因为jsp
页面中使用的<html:form...>表单中的action="*.do"中缺少/
③.当控制台出现有java.lang.NoSuchMethodException:Action[/*/*] does not contain
specified method (check logs)的错误时,是因为当前的jsp页面的表单中传的
参数method的值在action中没有此名的方法
④.当浏览器出现有HTTP Status 404-Invalid path was requested的字符串或者普通
404错误时,是因为当前jsp访问Action的方式不对,因为如果是页面中的html标签表单
或html标签超连接访问Action时可以加.do,也可不加,但是如果是普通标签或
普通超连接访问Action时就必须加.do
⑤.如果能确定一个一开始不需访问Action的页面(如添加信息的页面)中的代码没
有错误,但是访问时发生500错误或同时在控制台打印org.apache.jasper.JasperExcepti
on:/.../.../....jsp(29,1)Attribute Attribute invalid for tag form according to TLD之类
的信息时,可能是因为页面中使用了html标签的控件或表单(因为htm
l控件会自动绑定FormBean的属性值,而该页面又没有/不需要有相应的
FormBean),把html控件或表单改为普通的即可

9.Spring出现的错误:
①.用Spring时,只要某个层报空异常,是因为Spring没有给该层中调用的接口注入相应
的实现类对象
②.当页面/控制台打印以下错误语句
时:org.springframework.orm.hibernate3.HibernateQueryException:javaBean名 is not mapped

[hql语句];
nested exception is
org.hibernate.hql.ast.QuerySyntaxException:javaBean名 is not mapped [hql语句],是因为Spring
的配置文
件中没有配置相应的javabean..hbm.xml文件所致

10.SSH出现的错误:
(1).SSH2出现的错误
①.当控制台打印有
org.springframework.dao.InvalidDataAccessApiUsageException:Write operations are not allowed
in read-only mode (FlushMode.NEVER) - t
urnyour Session into FlushMode.AUTO or remove ‘readOnly‘ marker from
transaction definition的错误时,是因为Spring中的Hibernate的org.springframewor
k.orm.hibernate3.support.OpenSessionInViewFilter打开后flushMode的默认值
是MANUAL(手动)的,此时要将其改为AUTO(自动),可以在配置Hibernate的过滤节点<fi
lter>下加
<init-param><param-name>flushMode</param-name><param-value>AUTO</param-value></init
-param>试试
②.当用页面的<form>或<a href>访问/调用action时,如果访问的路径和struts.xml
中<package>节点下的namespace的值相同也和<package>节点下<action>节点中的name
的值是相同的,但就是报404/其它错误时先看applicationContext.xml中的创建
的action对象的id值是否和struts.xml中<package>节点下的<action>节点中的class的
值是否相同,如果是相同的也还报这个错,再看web.xml中配置的struts2的过滤
方式:<filter-mapping>节点下的<url-pattern>节点的值是否是/*或/action
③.当执行到层的insert/update/delete方法时,如果控制台打印执行成功且没有报
错但数据库中的数据没有改变时,是因为事务没有配置对的问题
④.配置Spring时,如果确定配置无错且和以前配的一模一样,但是它总是报以前出
现过的错或无效果时,是因为服务器中任然还 残留 以前的代码,将服务器中的项目彻底删
除后重新部署即可
⑤.当控制台/页面打印java.lang.RuntimeException:Invalid action class configuration
that references an unknown class named [className]错误时,是因为str
uts2的配置文件中所配置的和action声明/返回的对象不匹配,总之是配置文件
和程序配置冲突所致
注1:当页面/控制台报不明错误(从来没有遇到过的并用System.out.println()跟踪都
不能检查出错的地方,或当在不同的地方调用同一个方法时,一个地方能正常调用而另
一个地方却始终报错时)时,先打印出相关的hql语句看是否正确
注2:当控制台/页面打印有java.lang.reflect.InvocationTargetException或
java.lang.NoSuchMethodError:org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr
/RecognitionException;Lantlr/collections/impl/BitSet;)V的错误时,是因为hql语
句的错误,先打印相关hql语句,看hql语句是否有正确

(2).SSH1出现的错误
①.当控制台打印java.lang.NullPointerException的空指针异常时,可能是Spring中注

册Struts时只注册了:<bean name="Struts中<action节点的path属性的值" class=
"Struts的action的路径"></bean>节点而没有将Spring中已创建的服务层或其
它层的实现类对象注入到Spring中注册Struts时的<bean>节点中,也可能是Struts的配置
文件中<action-mappings>节点下的<action>节点中的type属性的值没有改为
org.springframework.web.struts.DelegatingActionProxy
②.当控制台什么也没有打印,而浏览器打印有HTTP Status 500 - No action instance
for path /项目名 could be created的错误时,是因为既没有导入Spring 2.0 We
b Libraries jar包也没有在Struts中的<message-resources节点下加<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn"><set-propert
y property="contextConfigLocation"
value="/WEB-INF/classes/applicationContext.xml"/></plug-in>节点
③.当控制台打印java.lang.ClassNotFoundException:
org.springframework.web.struts.ContextLoaderPlugIn的错误时,是因为导入Spring jar包时没有
勾选Spring 2
.0Web Libraries项即没有导入Spring 2.0 Web Libraries jar包
④.当控制台打印java.lang.IllegalStateException:No WebApplicationContext found:no
ContextLoaderListener registered?的错误时,可能是Struts的配置文件中没
有配置<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn"><set-property
property="contextConfigLocation" value="/WEB-INF/clas
ses/applicationContext.xml"/></plug-in>
注1:当页面/控制台报不明错误(从来没有遇到过的并用System.out.println()跟踪都
不能检查出错的地方,或当在不同的地方调用同一个方法时,一个地方能正常调用而另
一个地方却始终报错时)时,先打印出相关的hql语句看是否正确
注2:当控制台/页面打印有java.lang.reflect.InvocationTargetException或
java.lang.NoSuchMethodError:org.hibernate.hql.antlr.HqlBaseParser.recover(Lantlr
/RecognitionException;Lantlr/collections/impl/BitSet;)V的错误时,是因为hql语
句的错误,先打印相关hql语句,看hql语句是否有正确

11.Ext出现的错误:
(1).当不出现预想的效果时,如果确认不是浏览器缓存所致,但又找不出错误和原因并浏
览器状态栏左边出现有"网页上有错误"的消息时,双击此消息>单击弹出框中的"显示详细
信息"按钮查看错误(其中的"行"和"错误"说明了错误的位置和原因)
(2).使用Ext时,如果确定代码没有错,但是没有预想的效果时,可能是没有导入jar包或没
有引入已导入的js,或没有将Ext的组件渲染到div:即没有renderTo:"div的id值",或在
创建时没有new关键字,或因为代码中缺少或多了什么符号(,;:""(){}[]等),或代码的
顺序不对,或引入Ext样式文件描述符和库文件描述符时*/adapter/ext/ext-base.js的
顺序没有在*/ext-all.js之前引入,以上都对的情况下都没效果时是因为浏览器缓存
的原因,重新从服务器上删除项目再部署即可
(3).当用超连接或按钮的onclick事件弹出一个Ext,但刚弹出一瞬间Ext就销失(毁)了,是
因为超连接的href属性值不是#,按钮所在的表单的action值不是#,所以刚弹出Ext就继
续执行下一步定位到别的路径了,将其值为#即让它定位到当前位置从而保持了
Ext的呈现

(4).当用javascript(Ajax/Ext)调用其它层的方法时,如果总是进不了方法,先检查javascript
中使用的其它层的对象名和dwr中<create>节点的javascript的值是否一样,再检
查调用的方法所传的参数和其它层中方法的参数的个数和类型是否相对应
(5).当控制台出现有java.lang.SecurityException:class "org.objectweb.asm.CodeVisitor"‘s
signer information does not match signer information of other clas
ses in the same package的安全异常时,是因为包冲突引起的,将导入的json中的
commons-collections.jar删除试试
(6).当控制台出现有org.hibernate.LazyInitializationException:failed to lazily initialize a
collection of role:包名(entity).一个javaBean名.javaBean名adjus
tsForAfterjavaBean名,no session or session was closed延时加载的错误时,是因为将
HashMap转化为JSon时,HashMap中的数据不是String或基本数据类型,HashMap中的
数据不不能为对象型
(7).呈现Ext时如果在页面的前面和后面都同时出现相同的Ext界面,是因为js中多写了
renderTo属性

12.JavaScript调试:
(1).当使用js时,如果重新改变js中的内容后运行页面任然没有效果时,在改变内容的
js方法中打印一个字符串(alert("string");),保存后刷新页面后就有效果了

附:
1.因为MyEclipse有时会"犯傻",所以如果能确认所有的代码都无误的情况下但效果还是不
出来的话,就重新部署、启动服务器、关闭MyEclipse再重启
2.要判断一个List/集合中是否有值,不能用结合.equals(null),应该用结合.size();
3.当编辑窗口中的中文出现乱码时,右击当前编辑窗口对应的包资源管理器中的类/直接右
击该类所在的包>Properties>Resource>选中Text file encoding中的Other单选按钮并
选择其下拉列表中的UTF-8即可

二.ASP.NET程序调试与错误收集
document.all.Image1.src=document.all.FileUpload1.value;
with(document.all)
{
Image1.src=FileUpload1.value;
}
错误提示:有次我把上一句的代码写成了document.all.Image1.src=FileUpload1.value;从而导致
了错误

三.SQL Server程序调试与错误收集
1.当控制台打印"‘ ‘附近有语法错误"时,是因为SQL语句中有全角的空格
2.当控制台打印"将截断字符串或二进制数据。"时,是因为插入的某个字段的数据长度太大
(大于该字段定义的长度)

3.当数据库连接不上时先检查SQL Server配置管理器/SQL Server configuration manager中
各项的配置
SQL Server配置管理器(本地)/SQL Server Configuration Manager(Local)节点下的SQL本地
客户端配置/SQL Native Client Configuration节点中客户端协议/Client Protoc
ols中的TCP/IP项中的已启用/Enabled的值可为是(Yes)/否(No)、默认端口/Default Port
的值可更改.
SQL Server配置管理器(本地)/SQL Server Configuration Manager(Local)节点下的SQL
Server 2005网络配置/SQL Server 2005 Network Configuration节点下的"服务名(SQ
LEXPRESS)+的协议"/Protocols for 服务名(SQLEXPRESS)节点中TCP/IP项中协议/Protocol
下的已启用/Enabled的值最好为是(Yes),不行时再改为否(No)、无延迟的值最好为否
(No),不行时再改为是(Yes)、全部监听的值为是、IP地址/IP Addresses下的所有的活动
/Active的值为是(Yes)、激活/Enabled的值可为是(Yes)/否(No)、TCP动态端口/两项TC
P Dynamic Ports的值可随意
n.当安装SQL Server2000时,如果重新装了系统都还总是提示"本计算机上已存在实例"类型
的语句时,重新改过用户名即可重新安装

四.Oracle程序调试与错误收集
1.使用SQL Plus时如果出现ERROR: ORA-12541:TNS:没有监听器,是因为监听器服务没有启
动,控制面板>管理工具>服务>将OracleOraHome92TNSListener的服务启动即可
如果出现ERRORORA-12500:TNS:监听程序无法启动专用服务器进程,
是因为数据库对应的服务没有启动,控制面板>管理工具>服务>将OracleServiceSID(SID为数
据库实例名)的服务启动即可

五.MySQL出现的错误
1.当建表时弹出错误提示对话框并提示"Can‘t create table ‘tableName‘ (errno:150)时,是因
为当前表中关联了另一张不存在的表(注:一定要是150错误才是此原因)

时间: 2024-10-15 12:02:06

java调试与排错的相关文章

java调试器

javac.exe是编译.java文件 java.exe是执行编译好的.class文件 javadoc.exe是生成Java说明文档 jdb.exe是Java调试器 javaprof.exe是剖析工具 一.区别 (A)java.exe:              运行java程序 javaw.exe:              跟java命令相对的,运行java命令时,会出现并保持一个console窗口,        程序中的信息可以通过System.out在console内输出,而运行jav

JAVA调试

深入 Java 调试体系: 第 1 部分,JPDA 体系概览 深入 Java 调试体系,第 2 部分: JVMTI 和 Agent 实现 深入 Java 调试体系,第 3 部分: JDWP 协议及实现 深入 Java 调试体系,第 4             部分: Java 调试接口(JDI) https://yq.aliyun.com/articles/56?spm=5176.8067842.tagmain.74.RLrk6z http://docs.oracle.com/javase/8/

Java调试那点事

转自: http://yq.aliyun.com/articles/56?hmsr=toutiao.io&spm=5176.100240.searchblog.18&utm_medium=toutiao.io&utm_source=toutiao.io Java调试那点事 该文章来自于阿里巴巴技术协会(ATA)精选文章. Java调试概述 程序猿都调式或者debug过Java代码吧?都体会过被PM,PD,测试,业务同学们围观debug吧?说调试,先看看调试严格定义是什么.引用Wik

Java调试那点事[转]

转自云栖社区:https://yq.aliyun.com/articles/56?spm=5176.100239.blogcont59193.11.jOh3ZG# 摘要: 该文章来自于阿里巴巴技术协会(ATA)精选文章. Java调试概述 程序猿都调式或者debug过Java代码吧?都体会过被PM,PD,测试,业务同学们围观debug吧?说调试,先看看调试严格定义是什么.引用Wikipedia定义: 调试(De-bug),又称除错,是发现和减少计 该文章来自于阿里巴巴技术协会(ATA)精选文章.

程序员的编程、调试、排错小建议

在空白的文本编辑器里打开一个崭新的文本,没有一行代码,出现在眼前的是一个充满了无限可能和希望的项目.可是,当数千行的代码写完之后,整个项目因为bug的出现而被压垮了,更别说添加什么新功能了...这也许是对程序员的最大打击,在饱满的热情上浇了一盆冷水.其实,最好的软件程序员当然知道怎样去发现并修复这些bug,在刚开始编程的时候就通过软件工程的最好方法来降低bug的出现概率. 几乎没有哪个程序员能够写出一个bug都没有的代码,但是解决方法总是比困难多得多.多实践和坚毅的决心是成功的关键,这样才能够写

Java调试小例子(如何使用F5和F6)

如果一个类有3个方法,就在3个方法的前面设置断点,总共就3个断点,然后进入Debug调试, 一直按F6(Step Over)他会在方法那里直接进入方法而不需要你按F5(Step  Into) 或者你只是在第一个方法那里设置了一个断点,那么在调试时要进入方法就需要按F5(Step Into)来进入方法. package args参数问题; /* * 思考题1:看程序写结果,然后分析为什么是这个样子的.并画图讲解.最后总结Java中参数传递规律. * Java中的参数传递问题: 基本类型:形式参数的

java 调试

作为一名java开发程序员,或者有时候需要利用工具调试的时候,但是却感觉不会使用,其实只要记住四个键即可. 一般java开发工具使用的都是Eclipse或者MyEclipse,下面都有这几个键F5(进入方法),F6(单步向下执行),F7(退出该方法),F8(结束调试,如果有下一个断点即跳入到下一个断点位置处) 一般调试如下: 1,对需要调试的地方打断点,点击左边行数 2,进入Debug模式,点击视图的Debug 3,F5是单步进入方法 4,F6是单步往下执行 5,F7是退出当前方法 6,F8是结

Eclipse Java 调试基本技巧

前言 这一部分是Eclipse中最为重要的部分.调试的重要性想必大家都清楚. 调试无疑是做项目最苦比的事情,但优秀的编码习惯,良好的调试方式能让这没那么苦,甚至还有点乐趣:). 本文讲解使用Eclipse调试Java程序的方法. 调试基本步骤 1. 在代码行左侧双击设置断点 2. 点最上面这个小虫子的标记就能开始调试并进入调试界面: 3. 按如下快捷键可以一步步调试: F5:一步步调试,遇到方法进入. F6:一步步调试,遇到方法直接运行完毕. F7:直接运行完当前方法. F8:重新启动调试并运行

Linux下Java调试方法

1.如何开启一个Java进程的调试选项? 替换原有java程序: mv /usr/bin/java /usr/bin/java_true 在/usr/bin/目录下生成一个java文件,其内容如下: java_true -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y [email protected] 重新启动希望调试的程序,就可以看到调试参数已经添加上去了. 2.如何对其进行调试? 请参考如下链接: h