0

我收到消息值为 null 的 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 );

来自 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;
}
4

3 回答 3

0

大多数时候 java.lang.NoClassDefFoundError 不是实际问题。在此之前应该有另一个例外。对此类的任何访问都将触发 NoClassDefFound ,但这仅意味着未加载该类。它没有告诉你为什么。第 76 行可能有答案。

于 2013-01-23T09:04:41.667 回答
0

我认为您正在使用依赖于另一个 .jar 文件的库 (.jar) 文件,但当前项目中没有包含该依赖的 .jar 文件。请列出完整的错误消息,以便我们查看确切的问题 =D

于 2013-01-23T08:41:04.970 回答
0

最有可能的是,您的代码针对特定版本的库编译,并针对另一个版本运行。这基本上是一个链接错误。识别导致问题的库并不总是微不足道的,但行号应该表明在错误发生时正在加载哪个类。

更新:在您发布的堆栈跟踪中,错误源自 com.company.xyz.FooBar 类的构造函数(第 76 行),毫无疑问是 gov.nasa.programs.supersecret.bases.alphacentauri 的替代品。

该类必须依赖于此时无法加载的另一个类,这很可能是因为它不存在于编译它的确切版本中。请注意,实际问题可能在链条的下游,因此如果您排除它,请务必查看该类的依赖关系。

于 2013-01-23T10:34:24.550 回答