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

36 java cmd class javac package

当我.class参与其中package并尝试从cmd运行它时,我不断收到错误.

这是使用后使用的代码,javac然后是java:

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

然后代码不起作用:

package com;

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

尝试通过命令运行程序后给我这个错误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)
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止所做的尝试:

java -cp . HelloWorld
java -cp . com.HelloWorld
java -cp . com/HelloWorld
java HelloWorld
java com.HelloWorld
java com/HelloWorld
Run Code Online (Sandbox Code Playgroud)

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

我究竟做错了什么?

sgb*_*gbj 32

假设你做了cd C:/projects并且HelloWorld.class进入C:/projects/com,那么只需键入:

java com.HelloWorld
Run Code Online (Sandbox Code Playgroud)

  • 此时你必须进入C:\,而不是C:\ com.换句话说,您需要尝试从包目录外部运行它. (3认同)

Mad*_*mer 14

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

也就是说,如果你有一个包含package指令的源文件com,那么该文件应该存在于该com目录中.

在您的HelloWorld示例中,预计HelloWorld.java文件将存储在com目录中,如com\HelloWorld.java

编译文件时,它将创建一个HelloWorld.classcom目录中调用的类文件,如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
Run Code Online (Sandbox Code Playgroud)

然后我编译了 HelloWorld.java

C:\java>javac com\HelloWorld.java
Run Code Online (Sandbox Code Playgroud)

然后我跑了...

C:\java>java com.HelloWorld
Hello World!
Run Code Online (Sandbox Code Playgroud)

您可能希望阅读教程