如何从 cmd 运行作为包一部分的 .class 文件?

新手上路,请多包涵

当我将我的 .class 作为 package 的一部分并尝试从 cmd 运行它时,我不断收到错误消息。

下面是使用 javac 和 java 后的代码:

 class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

然后是不起作用的代码:

 package com;

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

尝试通过以下命令运行程序后出现此错误: java HelloWorld

 Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld (wrong nam
e: com/HelloWorld)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$100(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)

到目前为止,这是我尝试过的事情:

 java -cp . HelloWorld
java -cp . com.HelloWorld
java -cp . com/HelloWorld
java HelloWorld
java com.HelloWorld
java com/HelloWorld

请记住 javac 返回时没有错误,只需删除 package com; 即可解决问题。有时在其他情况下,我会收到一条错误消息,指出找不到主类文件或类似的内容。

我究竟做错了什么?

原文由 user2666594 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 582
2 个回答

假设你做了 cd C:/projects 并且 HelloWorld.classC:/projects/com 中,然后输入:

 java com.HelloWorld

原文由 sgbj 发布,翻译遵循 CC BY-SA 4.0 许可协议

包与文件的预期目录位置直接相关。

也就是说,如果您有一个包指令为 com 的源文件,预计该文件将位于 com 目录中。

In your HelloWorld example, it would be expected that the HelloWorld.java file would be stored in the com directory, like com\HelloWorld.java

编译文件时,它将在 com 目录中创建一个名为 HelloWorld.class 的类文件,如 com\HelloWorld.class

这样,当 Java 寻找 com.HelloWorld 类时,它实际上会搜索它的类路径并附加 com\HelloWorld.class 直到它找到你的类文件或用完类路径

例子

所以,我将你的 HelloWorld.java (带包)示例复制到 C:\java\com\HelloWord.java

从命令行,我更改为 C:\java 目录…

 C:\java>dir com
 Volume in drive C is OS
 Volume Serial Number is ####-####

 Directory of C:\java\com

09/08/2013  01:55 PM    <DIR>          .
09/08/2013  01:55 PM    <DIR>          ..
09/08/2013  01:55 PM               135 HelloWorld.java

然后我编译了 HelloWorld.java

 C:\java>javac com\HelloWorld.java

然后我运行它…

 C:\java>java com.HelloWorld
Hello World!


您可能想阅读 Packages 教程

原文由 MadProgrammer 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题