为什么我在Java中获得NoClassDefFoundError?NoClassDefFoundError当我运行我的Java应用程序时,我得到了一个。这通常是什么原因?
3 回答

阿波罗的战车
TA贡献1862条经验 获得超6个赞
虽然这可能是由于编译时和运行时之间的类路径不匹配,但它不一定是真的。
在这种情况下,重要的是要保持两到三个不同的例外:
java.lang.ClassNotFoundException
此异常表示在类路径中找不到该类。这表明我们正在尝试加载类定义,并且类在路径上不存在。java.lang.NoClassDefFoundError
此异常表示JVM在其内部类定义数据结构中查找了类的定义但未找到它。这与说它无法从类路径加载不同。通常这表明我们之前尝试从类路径加载一个类,但由于某种原因它失败了 - 现在我们正在尝试再次使用该类(因此需要加载它,因为它上次失败了),但是我们'甚至没有尝试加载它,因为我们之前没有加载它(并且合理地怀疑我们会再次失败)。较早的失败可能是ClassNotFoundException或ExceptionInInitializerError(表示静态初始化块中的失败)或任何其他问题。关键是,NoClassDefFoundError不一定是类路径问题。

慕慕森
TA贡献1856条经验 获得超17个赞
这是代码来说明java.lang.NoClassDefFoundError
。有关详细说明,请参阅Jared的答案。
NoClassDefFoundErrorDemo.java
public class NoClassDefFoundErrorDemo { public static void main(String[] args) { try { // The following line would throw ExceptionInInitializerError SimpleCalculator calculator1 = new SimpleCalculator(); } catch (Throwable t) { System.out.println(t); } // The following line would cause NoClassDefFoundError SimpleCalculator calculator2 = new SimpleCalculator(); }}
SimpleCalculator.java
public class SimpleCalculator { static int undefined = 1 / 0;}
添加回答
举报
0/150
提交
取消