我的目录结构如下所示.
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)
| 归档时间: |
|
| 查看次数: |
971 次 |
| 最近记录: |