JVM无法找到我的类:java.lang.NoClassDefFoundError

Gar*_*hes 5 java

我的目录结构如下所示.

PackagesUnit3/com/myname/start/PackagesTest.java
(此类包含我的main和import语句"import com.systems.mui.*;)

PackagesUnit3/com/systems/mui/Test.java
(此类包含包语句"package com.systems.mui;")

使用PackageUnit3作为我的基本目录,我可以使用该语句成功编译这两个类

"javac com/myname/start/PackagesTest.java"
Run Code Online (Sandbox Code Playgroud)

但是我无法使用该命令运行代码

"java com.myname.start.PackagesTest"

Error: "Exception in thread "main" java.lang.NoClassDefFoundError: com/myname/start/PackagesTest (wrong name: PackagesTest)"
Run Code Online (Sandbox Code Playgroud)

编译器.class为每个java类成功生成文件,并将它们放在与源文件相同的位置.

根据Horstmann的说法,"核心Java"第9版.页.186,我的"java"命令语法应该有效.

我不应该指定当前目录("."),因为我没有使用classpath(-cp)选项.

注意:我使用"SUBST R:"命令将PackagesUnit3目录建立为基本目录.我的实际命令行看起来像R:>

有什么建议??

Jon*_*eet 10

鉴于例外,看起来你错过了一个package声明:

package com.myname.start;
Run Code Online (Sandbox Code Playgroud)

您的包声明应该与您的目录结构匹配,然后将使用正确的完全限定名称生成该类com.myname.start.PackageTest.

可以在IDE中编译,为您排序,也可以使用可选-d参数从包结构的根目录进行编译,以指定根输出目录,例如

$ javac -d bin com/myname/start/*.java
$ java -cp bin com.myname.start.PackageTest
Run Code Online (Sandbox Code Playgroud)