2013-04-11 111 views
0

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

+1

检查堆栈跟踪将是一个好的开始 – 2013-04-11 16:26:20

+1

这个异常的唯一原因是该类不存在于你的类路径中..仔细检查你的类路径 – sanbhat 2013-04-11 16:26:28

+1

这是因为路径不正确,所有的类都不是无障碍。 – 2013-04-11 16:29:54

回答

1

构建路径是正确的,所有的课程都可以访问

你应该没有得到错误。您可以得到该错误的唯一原因是该类是由子类加载器加载的,并且位于类路径中,但是父类加载器试图访问它(假设代理模型是父代优先)。在这种情况下,该类由JVM加载,但程序无法访问它。

想一想,有一些更复杂的场景可能导致类加载异常,这是基于实例化和使用类加载器的方式。 Commons logging受到了这些,我已经在接收端比我想承认更多的时间。有一个excellent article,如果您想要看一看,则突出显示这些场景。

1

我会检查所有类的构建目录。我怀疑你会发现你的班级缺失。


编辑:由于@Hot舔注意到,你从一个破碎类得到的错误是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 
+0

这通常是NoClassDefFoundError。 – 2013-04-11 16:29:19

+0

@HotLicks感谢您的更正。 – 2013-04-11 16:33:12