无法解决java NoClassDefFoundError,但一切看起来都正确......任何想法?

时间:2010-11-12 15:22:06

标签: java jar package directory

如果我没有提供足够的信息或者我不清楚任何事情,请提前抱歉,这是我第一次尝试使用.bat.config文件。

我正在使用一款学术软件,并试图添加和运行我自己的组件。系统使用配置文件使用如下代码启动系统所需的组件(类)列表:

semaine.components = \
eu.semaine.examples.swimmer.SwimmerDisplay| \

系统正常运行并初始化指定的组件。

我使用以下代码将自己的组件添加到现有组件列表中:

eu.semaine.examples.TestPackage.MyTest| \

然而我收到以下错误:

  

java.lang.NoClassDefFoundError:eu / semaine / examples / TestPackage / MyTest(错误名称:TestPackage / MyTest)

我环顾四周,在我看来,我没有做任何通常会导致此错误的事情,例如:我的类名与其存储的文件名相匹配(公共类MyTest存储在MyTest.java),MyTest位于包TestPackage中,文件夹中的文件夹也被命名为TestPackage

任何想法或建议都将不胜感激。

3 个答案:

答案 0 :(得分:2)

您已要求

eu.semaine.examples.TestPackage.MyTest

但请说您已将文件放在名为TestPackage的目录中。

仔细查看批处理文件中指定的类路径。我的猜测是你有一个像这样的目录层次结构,用于初始冲突,根据指定的类路径

eu
  semaine
    examples
        swimmer
           SwimmerDisplay

在说eu.semaine.examples.TestPackage.MyTest时你说包是“eu.semaine.examples.TestPackage”,目录层次结构现在是

eu
  semaine
    examples
        swimmer
           SwimmerDisplay.class
        TestPackage
           MyTest.class

我认为你打算改为:

eu
  semaine
    examples
        swimmer
           SwimmerDisplay.class
TestPackage
  MyTest.class

并说该课程只是

TestPackage.MyTest

eu.semaine.examples.TestPackage.MyTest

[顺便说一下,我同意正常的约定不是将包名称大写,但我不相信Java从大写中推断和语义。]

答案 1 :(得分:0)

听起来你的类在启动时不在应用程序的类路径中。你提到了.bat个文件。如果这是启动应用程序的方式,那么它应该包含组装类路径的部分。它必须包含TestPackage文件夹的父文件夹,以便JVM知道在哪里找到您的类文件。

答案 2 :(得分:0)

命名约定规定包名称必须全部为小写,请参阅http://download.oracle.com/javase/tutorial/java/package/namingpkgs.html

我想jvm认为TestPackage是一个类而MyTest是一个内部类。