ClassNotFoundException导致

时间:2013-04-11 16:25:11

标签: java classnotfoundexception

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

  

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

那你不应该得到错误。您可以获得该错误的唯一另一个原因是,如果该类是由子类加载器加载并且在类路径中,但是父类加载器正在尝试访问它(假设委托模型是父类) -第一)。在这种情况下,类由JVM加载,但程序无法访问它。

考虑到这一点,有一些更复杂的场景可能会导致基于如何实例化和使用类加载器的类加载异常。 Commons logging 遭受了这些困扰,而且我已经接受了比我想承认的更多次。如果你想看一下,有一个excellent article突出显示这些场景。

答案 2 :(得分:0)

这是一篇可能对您有帮助的好文章。它列出了13件你可以考虑查看的罪魁祸首。

ClassNotFoundException: A List of Dumb Things to Check