ClassNotFoundException导致

xhic 发布于 2019-03-09 classnotfoundexception 最后更新 2019-03-09 14:38 0 浏览

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

已邀请:

gautem

赞同来自:

build path is correct and all of the classes are accessible
你不应该得到错误。您可以获得该错误的唯一另一个原因是,如果类是由子类加载器加载并且在类路径中,但是父类加载器正在尝试访问它(假设委托模型是父级优先)。在这种情况下,类由JVM加载,但程序无法访问它。 考虑一下,有一些更复杂的场景可能会导致类加载异常,具体取决于类加载器的实例化和使用方式。 Commons伐木遭遇了这些,而且我已经接受了比我想承认的更多次。有一个excellent article可以突出显示这些情况,如果你想看看。

bsint

赞同来自:

这是一篇可能对您有帮助的好文章。它列出了13件你可以考虑查找的罪魁祸首。 ClassNotFoundException: A List of Dumb Things to Check

wnihil

赞同来自:

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


编辑:正如@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