我正在使用spring boot使用java8启动RMI服务器应用程序。在极少数情况下:应用程序无法初始化类,并抛出“ java.lang.NoClassDefFoundError:无法初始化类X”。X并不总是相同的类,但是到目前为止,所有这些类都具有相同的静态成员初始化。(并非总是直接,因此stacktrace并不总是指向静态变量...)Java进程对jar仍具有有效的读取文件句柄。该过程开始后,jar文件没有更改。内存不是问题。由于问题非常非常罕见,因此我无法重现。您将如何继续发现问题?是否可以获得有关NoClassDefFoundError真正原因的更多信息?
2 回答
![?](http://img1.sycdn.imooc.com/5458689e000115c602200220-100-100.jpg)
守着星空守着你
TA贡献1799条经验 获得超8个赞
NoClassDefFoundError
当在编译期间存在该类时发生,因此该程序已成功编译,但由于任何原因在运行时不可用。
在J2EE环境中,NoClassDefFoundError
即使存在该类,也可能会遇到一个问题,因为该类对于相应的类加载器而言是不可见的。
确实很难诊断和解决此问题,因为问题是在运行时类路径中的类文件不可用。但是您可以尝试使用这些方法来避免此问题。
确保在类路径中是否有包含该类的类或jar。
如果在应用程序的类路径上可用,则很可能是类路径被覆盖。要解决此问题,您需要找到应用程序使用的确切类路径。
如果应用程序使用多个类加载器,则由一个类加载器加载的类可能无法由其他类加载器使用。
![?](http://img1.sycdn.imooc.com/533e4c0500010c7602000200-100-100.jpg)
互换的青春
TA贡献1797条经验 获得超6个赞
java.lang.NoClassDefFoundError:
意味着在类路径中找不到您要运行的类。
您需要将包含此类的类或.jar文件添加到java类路径中。
当编译器可以成功编译类但Java运行时无法找到类文件时,将发生错误。通常在执行静态块或初始化类的静态字段时发生异常时发生,因此类初始化失败。
修复:1.确保在类路径中是否有包含该类的类或jar。
2.classpath然后很可能是classpath被覆盖
3.如果应用程序使用多个类加载器,则由一个类加载器加载的类可能无法由其他类加载器使用。
添加回答
举报
0/150
提交
取消