为了账号安全,请及时绑定邮箱和手机立即绑定

查找java.lang.NoClassDefFoundError的真正原因

查找java.lang.NoClassDefFoundError的真正原因

GCT1015 2021-04-02 18:15:10
我正在使用spring boot使用java8启动RMI服务器应用程序。在极少数情况下:应用程序无法初始化类,并抛出“ java.lang.NoClassDefFoundError:无法初始化类X”。X并不总是相同的类,但是到目前为止,所有这些类都具有相同的静态成员初始化。(并非总是直接,因此stacktrace并不总是指向静态变量...)Java进程对jar仍具有有效的读取文件句柄。该过程开始后,jar文件没有更改。内存不是问题。由于问题非常非常罕见,因此我无法重现。您将如何继续发现问题?是否可以获得有关NoClassDefFoundError真正原因的更多信息?
查看完整描述

2 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

NoClassDefFoundError 当在编译期间存在该类时发生,因此该程序已成功编译,但由于任何原因在运行时不可用。

J2EE环境中NoClassDefFoundError即使存在该类,也可能会遇到一个问题,因为该类对于相应的类加载器而言是不可见的。

确实很难诊断和解决此问题,因为问题是在运行时类路径中的类文件不可用。但是您可以尝试使用这些方法来避免此问题。

  1. 确保在类路径中是否有包含该类的类或jar。

  2. 如果在应用程序的类路径上可用,则很可能是类路径被覆盖。要解决此问题,您需要找到应用程序使用的确切类路径。

  3. 如果应用程序使用多个类加载器,则由一个类加载器加载的类可能无法由其他类加载器使用。


查看完整回答
反对 回复 2021-04-14
?
互换的青春

TA贡献1797条经验 获得超6个赞

java.lang.NoClassDefFoundError:

意味着在类路径中找不到您要运行的类。

您需要将包含此类的类或.jar文件添加到java类路径中。

当编译器可以成功编译类但Java运行时无法找到类文件时,将发生错误。通常在执行静态块或初始化类的静态字段时发生异常时发生,因此类初始化失败。

修复:1.确保在类路径中是否有包含该类的类或jar。

2.classpath然后很可能是classpath被覆盖

3.如果应用程序使用多个类加载器,则由一个类加载器加载的类可能无法由其他类加载器使用。


查看完整回答
反对 回复 2021-04-14
  • 2 回答
  • 0 关注
  • 416 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信