2013-04-11 110 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