NoClassDefFoundError 多数情况下是在类的构造函数或 static { } 代码块中抛出了异常。导致第一次尝试 define 一个类时出错了。
第一次加载一个类时,它会先 find,找到了之后再 define,如果是 find 失败得到的是 ClassNotFoundException,而找到之后 define 失败就是 NoClassDefFoundError.
比如下面这个情况就会导致,第一次跑 me = new MyClass(); 时会出错,当另外一个类第二次来 MyClass.getInstance() 时会出现 NoClassDefFoundError。
所以你要做的是从日志中(或debug) 来找出在出现 NoClassDefFoundError 之前出现过什么 Exception/Error,另外,有没有在命令行加参数来启用 JDK 6 的 Instrument (比如,把一个 jar 加密后用 Instrument 来解密再加载)。
public class MyClass {
private static final MyClass me = new MyClass();
public static MyClass getInstnace() { return me; }
private MyClass() {
if (true) throw new RuntimeException("I need holiday");
}
}
import java.net.URL;
类没有找到,是不是有包没导