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

时间:2013-08-02 14:54:49

标签: java

我的目录结构如下所示。

PackagesUnit3 / COM / MYNAME /启动/ PackagesTest.java
(此类包含我的main和import语句“import com.systems.mui。*;)

PackagesUnit3 / COM /系统/ MUI / Test.java
(此类包含package语句“package com.systems.mui;”)

使用PackageUnit3作为我的基本目录,我可以使用语句

成功编译这两个类
"javac com/myname/start/PackagesTest.java"

但是我无法使用命令

运行代码
"java com.myname.start.PackagesTest"

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

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

根据Horstmann的说法,“Core Java”第9版。页。 186,我的“java”命令语法应该有用。

我不必指定当前目录(“。”),因为我没有使用classpath(-cp)选项。

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

有什么建议吗?

2 个答案:

答案 0 :(得分:10)

鉴于异常,您似乎错过了package声明:

package com.myname.start;

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

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

$ javac -d bin com/myname/start/*.java
$ java -cp bin com.myname.start.PackageTest

答案 1 :(得分:0)

我已经检查了这一点,重新创建了场景并且你是对的...假设所有类都是公共的,具有正确的包声明,并且从根目录编译,类Test将成功编译,因为它不引用任何其他类(或来自不同包的类)。不需要-cp选项

在编译类PackagesTest时,无法找到类Test。但是通过添加-cp .,它可以成功编译。

一旦编译了两个文件,尝试运行PackagesTest'main,也将无法找到类Test。但通过添加-cp ,,它可以顺利运行。

通过使用选项-verbose,您可以看到javac(和java)命令在哪里查找类,因为它显示默认的类路径,它不包含“。”。 (本地目录)