.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
。
任何想法或建议都将不胜感激。
答案 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是一个内部类。