我的目录结构是这样的。
PackagesUnit3/com/myname/start/PackagesTest.java
(此类包含我的主语句和导入语句“import com.systems.mui.*;)
PackagesUnit3/com/systems/mui/Test.java
(此类包含包语句“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 版。 p. 186, 我的“java”命令语法应该可以工作。
我不必指定当前目录 ("."),因为我没有使用类路径 (-cp) 选项。
请注意:我使用"SUBST R: " 命令将PackagesUnit3 目录建立为基本目录。我的实际命令行看起来像 R:>
有什么建议吗??
最佳答案
鉴于异常,您似乎缺少 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
关于java - JVM 找不到我的类 : java. lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18020017/