我收到NoClassDefFoundError,消息值为null。我不知道哪个类有初始化问题。顶级跟踪是类的构造函数,而不是类的静态部分。造成这种例外的原因是什么?
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 );
来自Msg类的一些代码:
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;
}
答案 0 :(得分:0)
我认为您正在使用依赖于另一个.jar文件的库(.jar)文件,但您没有当前项目中包含的依赖.jar文件。请列出完整的错误消息,以便我们可以看到确切的问题= D
答案 1 :(得分:0)
大多数时候java.lang.NoClassDefFoundError不是实际问题。在此之前应该有另一个例外。 对此类的任何访问都将触发NoClassDefFound,但它仅表示未加载该类。它没有告诉你原因。第76行可能会得到答案。
答案 2 :(得分:0)
最有可能的是,您的代码针对特定版本的库进行编译,并且正在针对另一个版本运行。这基本上是一个连锁错误。 识别导致问题的库并不总是微不足道的,但是行号应该表明在错误发生时正在加载哪个类。
更新:在您发布的堆栈跟踪中,错误源自com.company.xyz.FooBar类的构造函数(第76行),毫无疑问是gov.nasa的替身。 programs.supersecret.bases.alphacentauri。
该类必须依赖于另一个在该点无法加载的类,很可能是因为它在编译时的确切版本中不存在。请注意,实际问题可能会在链中进一步发生,因此如果您将其排除在外,请务必查看该类的依赖关系。