2013-01-23 80 views
0

我收到消息值爲null的NoClassDefFoundError。我不知道哪個類有初始化問題。頂級跟蹤是類的構造函數,而不是類的靜態部分。什麼可能是這種例外的原因?什麼是空NoClassDefFoundError的原因?

java.lang.NoClassDefFoundError 
    at com.company.xyz.FooBar.<init>(FooBar:76) 
    .... 

守則Foobar的線76:

drv = data.get(i).getDrivers(); 
drvnameToAdd = Msg.getMsg("msgkey"); <-- line 76 
allNotImported.add(drvnameToAdd); 

從類消息的一些代碼:

private static final ResourceBundle LANGUAGE_RESOURCES; 
static { 
    LANGUAGE_RESOURCES = ResourceBundle.getBundle("com.company.xyz.i18n.LanguageResources"); 
} 

public static String getMsg(String msgID) { 
    String msg; 
    try { 
     msg = LANGUAGE_RESOURCES.getString(msgID); 
    } catch(Throwable e) { 
     msg = "$" + msgID + "$"; 
    } 
    return msg; 
} 
+1

可能是一些在構造函數中使用的類。你能顯示一些代碼(特別是Foobar:76)嗎? – Manish

+0

@Manish我添加了代碼序列 – Horcrux7

+0

消息是問題所在。很有可能找不到資源包:LANGUAGE_RESOURCES = ResourceBundle.getBundle(「com.company.xyz.i18n.LanguageResources」); – jdb

回答

0

我認爲你正在使用庫(的.jar)文件,該文件是依賴在另一個.jar文件上,但是沒有包含在當前項目中的依賴.jar文件。請列出完整的錯誤信息,所以我們可以看到確切的問題= d

+0

這是完整的信息。只有堆棧跟蹤更長。 – Horcrux7

0

大部分時間java.lang.NoClassDefFoundError不是實際問題。在此之前應該有另一個例外。 對此類的任何訪問都會觸發NoClassDefFound,但這隻意味着該類未加載。它不會告訴你爲什麼。 76行可能會有答案。

0

最有可能的,你的代碼編譯對庫的特定版本,並運行對另一個。這基本上是一個鏈接錯誤。 識別導致問題的庫並不總是微不足道的,但行號應該提示錯誤發生時正在加載哪個類。

更新:在您的貼堆棧跟蹤,誤差在類com.company.xyz.FooBar構造函數(線76)起源,無疑是一個替身gov.nasa.programs.supersecret。 bases.alphacentauri。

這個類必須在不能在這一點上加載另一個類,最有可能的依賴,因爲它不存在於人們對編譯的確切版本。請注意,實際問題可能會進一步落在鏈條的下面,因此如果排除該問題,請務必查看該類的依賴關係。

相關問題