0

如果构建路径正确并且所有类都可以访问(相同的包!),此异常的原因是什么?我应该怎么做才能找到罪魁祸首?谢谢!

4

3 回答 3

1

构建路径正确并且所有类都可以访问

那你不应该得到错误。您可能会收到该错误的唯一其他原因是该类是否由子类加载器加载并且位于类路径中,但父类加载器正在尝试访问它(假设委托模型是父类优先)。在这种情况下,类由 JVM 加载,但程序无法访问它。

想一想,根据类加载器的实例化和使用方式,有一些更复杂的场景可能会导致类加载异常。Commons 日志记录受到这些影响,我在接收端的次数比我想承认的要多。如果您想看一下,有一篇优秀的文章突出了这些场景。

于 2013-04-11T16:37:03.963 回答
1

我会检查构建所有类的目录。我怀疑你会发现你的课不见了。


编辑:正如@Hot Licks 所指出的,您从损坏的类中得到的错误是 NoClassDefFoundError

public static void main(String... ignored) {
    for (int i = 0; i < 3; i++) {
        try {
            new BrokenClass();
        } catch (Throwable t) {
            System.out.println(t);
        }
    }

}

static class BrokenClass {
    static {
        if (true)
            throw new AssertionError();
    }
}

在 Java 7 上打印

java.lang.AssertionError
java.lang.NoClassDefFoundError: Could not initialize class Main$BrokenClass
java.lang.NoClassDefFoundError: Could not initialize class Main$BrokenClass
于 2013-04-11T16:27:42.763 回答
0

Here's a good article that might just help you. It lists down 13 things you can consider looking at to find that culprit.

ClassNotFoundException: A List of Dumb Things to Check.

于 2013-04-11T16:46:02.630 回答