2013-01-23 50 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。

这个类必须在不能在这一点上加载另一个类,最有可能的依赖,因为它不存在于人们对编译的确切版本。请注意,实际问题可能会进一步落在链条的下面,因此如果排除该问题,请务必查看该类的依赖关系。

相关问题