java程序报错后的排错思路

简介: java程序报错后的排错思路

  目前总结出来三个字:看日志! 而且是从左到右一个单词一个单词的看。



  举个例子:

  Spring框架下的一个Demo,启动时报出了以下错误。

一、看异常类型

 首先,能看到异常是从引入的SpringFramework依赖中报出来的,具体的路径在黑框中,可以看到关键类“beans”、“factory”、“xml”以及异常类“XmlBeanDefinitionStoreException”。

 从关键字可以大致推测,问题是在Bean工厂获取Bean对象前后这个时间段出现的,并且获取Bean对象的方式和xml配置文件有关。具体的异常类型是“XmlBeanDefinitionStoreException”,直接翻译过来的意思是:Xml Bean定义存储异常。问题范围就缩小到在xml中定义bean的方式有问题了。

 仅仅是黑框中的异常类路径,就暴露了这么多的信息,所以排错时看日志至关重要。

二、看具详细误信息

Line 21 in XML document from class path resource [beanFirst.xml] is invalid; nested exception is org.xml.sax.SAXParseException;

lineNumber: 21;

columnNumber: 74;

cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 ‘c:bean’ 的声明。


 在[beanFirst.xml]这个配置文件中的第21行出错了,这个详细错误信息是SAXParseException异常类告诉我们的,SAX(针对XML的简单API)是基于事件为XML文档的解析器,那么定义错误已经精准定位到beanFirst.xml的第21行了,后面又提示“通配符的匹配很全面, 但无法找到元素 ‘c:bean’ 的声明。” “通配符匹配的很全面”是说,我们在xml中有关通配符的写法没有问题,全都匹配上了。

  问题出在元素“c:bean”的声明上,没有这个元素的定义。

 我们看到“bean”标签是“beans”下的一个子标签;“c:”是引入了一个Spring自定义的xml依赖,命名空间依赖是全的。而且IDEA没有帮我们排查出错误,这个元素下没有红线、错误提示信息。

 回顾第一步,错误类型说明是bean的定义方式不正确,所以推测"c:bean"这种写法不符合规范。



 详细错误信息是谁提供给我们的呢?

 Application类中test02方法的执行产生了异常对象,第一行是产生异常对象的类,后面的类通过throws关键字将异常对象一层层抛上来。实际上是通过递归的方式。

点开第一个类,找到指定的行数,可以看到异常对象被实例化了出来。

三、具体问题具体分析

 到这一步问题已经锁定了,很多情况下锁定问题是很困难的,但是只要锁定了问题,解决问题就有针对性,只差解决问题的方案。

 很多人用尝试代替学习,一遇到问题就借助搜索引擎,尝试几种方法后蒙对一次就算解决了,下次遇到类似问题,依然像第一次解决这类问题一样来回尝试。所以总结排错方法很重要,下次面对相似错误的变形,我们依然可以通过上面那套思路锁定问题,大大节省效率。靠尝试代替学习的人工作效率低,靠加班解决问题,岁数大了以后加不动班,或者靠加班也解决不了问题。加班不是努力的表现,过去我也经常加班,从现在起不想再加班了,为此我要优化我的工作方法,以后还会继续做总结,希望大家新的一年都有进步。


相关文章
|
20天前
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
9天前
|
Java Windows
【Azure Function】部署Java Function失败:报错deploy [ERROR] Status code 401和警告 'China North 3' may not be a valid region
1:deploy [ERROR] Status code 401, (empty body). 2: China North 3 may not be a valid region,please refer to https://aka.ms/maven_function_configuration#supported-regions for values. 3:  <azure.functions.maven.plugin.version>1.36.0</azure.functions.maven.plugin.version>
24 11
|
2月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
217 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
2月前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
58 1
|
2月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
103 1
|
2月前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
2月前
|
安全 小程序 Java
Java“AccessControlException”报错解决
Java中的“AccessControlException”通常发生在尝试访问受安全策略限制的资源时。解决方法包括:1. 检查安全策略文件(java.policy)配置;2. 确保代码具有足够的权限;3. 调整JVM启动参数以放宽安全限制。
224 1
|
3月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
565 2
|
3月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
189 1
|
3月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
104 1