志在指尖
用双手敲打未来

java.lang.noclassdeffounderror怎么解决?

java.lang.noclassdeffounderror怎么解决?

NoClassDefFoundError过错的产生,是因为Java虚拟机在编译时能找到适宜的类,而在运行时不能找到适宜的类导致的过错。例如在运行时咱们想调用某个类的方法或许拜访这个类的静态成员的时候,发现这个类不行用,此时Java虚拟机就会抛出NoClassDefFoundError过错。与ClassNotFoundException的不同在于,这个过错产生只在运行时需求加载对应的类不成功,而不是编译时产生。很多Java开发者很简单在这里把这两个过错搞混。
简单总结便是,NoClassDefFoundError产生在编译时对应的类可用,而运行时在Java的classpath路径中,对应的类不行用导致的过错。
NoClassDefFoundError和ClassNotFoundException差异
咱们经常被java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError这两个过错利诱不清,虽然他们都与Javaclasspath有关,但是他们彻底不同。NoClassDefFoundError产生在JVM在动态运行时,依据你供给的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就产生了java.lang.NoClassDefFoundError的过错,而ClassNotFoundException是在编译的时候在classpath中找不到对应的类而产生的过错。ClassNotFoundException比NoClassDefFoundError简单处理,是因为在编译时咱们就知道过错产生,并且彻底是因为环境的问题导致。而假如你在J2EE的环境下作业,并且得到NoClassDefFoundError的异常,并且对应的过错的类是的确存在的,这说明这个类关于类加载器来说,或许是不行见的。
怎么处理NoClassDefFoundError过错

java
依据前文,很明显NoClassDefFoundError的过错是因为在运行时类加载器在classpath下找不到需求加载的类,所以咱们需求把对应的类加载到classpath中,或许检查为什么类在classpath中是不行用的,这个产生或许的原因如下:
1.对应的Class在java的classpath中不行用
2.你或许用jar指令运行你的程序,但类并没有在jar文件的manifest文件中的classpath属性中界说
3.或许程序的发动脚本覆盖了本来的classpath环境变量
4.因为NoClassDefFoundError是java.lang.LinkageError的一个子类,所以或许因为程序依靠的原生的类库不行用而导致
5.检查日志文件中是否有java.lang.ExceptionInInitializerError这样的过错,NoClassDefFoundError有或许是因为静态初始化失利导致的(这是我遇到的问题的处理办法)
6.假如你作业在J2EE的环境,有多个不同的类加载器,也或许导致NoClassDefFoundError。
7.NoClassDefFoundError也或许因为类的静态初始化模块过错导致,当你的类履行一些静态初始化模块操作,假如初始化模块抛出异常,哪些依靠这个类的其他类会抛出NoClassDefFoundError的过错。假如你检查程序日志,会发现一些java.lang.ExceptionInInitializerError的过错日志,ExceptionInInitializerError的过错会导致java.lang.NoClassDefFoundError:Couldnotinitializeclass
附上我遇到的问题:
移除一个jar包后正常作业

未经允许不得转载:IT技术网站 » java.lang.noclassdeffounderror怎么解决?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载