已解决java.lang.NoClassDefFoundError异常的正确解决方法,亲测有效!!!
已解决java.lang.NoClassDefFoundError异常的正确解决方法,亲测有效!!!
报错问题
粉丝群里面的一个小伙伴敲代码时发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴),报错信息如下:
step1:启动项目报错
step2:查询NoClassDefFoundError异常原因
NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。例如在运行时我们想调用某个类的方法或者访问这个类的静态成员的时候,发现这个类不可用,此时Java虚拟机就会抛出NoClassDefFoundError错误。与ClassNotFoundException的不同在于,这个错误发生只在运行时需要加载对应的类不成功,而不是编译时发生。很多Java开发者很容易在这里把这两个错误搞混。
简单总结就是,NoClassDefFoundError发生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不可用导致的错误。
解决方法
解决方法如下
public static String url = ConfigService.getInstance().getBean("ElasticSearch", new String[0]).getString("url");
最后找出导致异常的代码是这个,原因是这个静态变量没有在配置文件里面配置,导致java虚拟机在初始化这个类时这个静态变量异常。
当发生由于缺少jar文件,或者jar文件没有添加到classpath,或者jar的文件名发生变更会导致java.lang.NoClassDefFoundError的错误。
当类不在classpath中时,这种情况很难确切的知道,但如果在程序中打印出System.getproperty(“java.classpath”),可以得到程序实际运行的classpath
运行时明确指定你认为程序能正常运行的 -classpath 参数,如果增加之后程序能正常运行,说明原来程序的classpath被其他人覆盖了。
NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError的错误。如果你查看程序日志,会发现一些java.lang.ExceptionInInitializerError的错误日志,ExceptionInInitializerError的错误会导致java.lang.NoClassDefFoundError: Could not initialize class
福利
每周会送6本技术书籍包邮到家
由于博主时间精力有限,每天私信人数太多,没办法每个粉丝都及时回复
大家可以进社区裙或者添加博主微信
点击下方链接即可
http://t.csdn.cn/6kInJ
相关文章
- Java 日期、时间类,日期、时间的格式化
- java基础—Calendar类方法演示
- Java中如何遍历Map对象的4种方法
- Java两种拼接http Get请求参数URL连接地址的方法
- java:compareTo和compare方法之比较
- sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class异常解决方法
- JAVA基础--泛型中常用的通配符
- java Collections.sort()实现List排序自定义方法
- java读取xml文件的四种方法
- JAVA线程sleep和wait方法区别
- Java检测对象是否相等
- Java 完美判断中文字符的方法
- Java Efficient data transfer through zero copy
- Java中的微信支付(3):API V3对微信服务器响应进行签名验证
- java中Scanner类nextLine()和next()的区别和使用方法
- 5.Java方法的定义和使用 —— Java SE
- Java list三种遍历方法性能比较
- Java LoggingAPI 使用方法
- 【JAVA】Collections类的其他方法
- java中,一个类实现某个接口,必须重写接口中的所有方法吗?
- Java八种基本数据类型&字符串&运算符(图文详解)