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

2022-09-01 02:03:36

当我制作我的一部分并尝试从cmd运行它时,我不断遇到错误。.classpackage

以下是使用后和java后工作的代码:javac

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

请记住,返回时没有错误,并且只需删除即可解决问题。有时在其他情况下,我会收到一个错误,说找不到主类文件或类似的东西。javacpackage com;

我做错了什么?


答案 1

假设您做了 并且位于 中,则只需键入:cd C:/projectsHelloWorld.classC:/projects/com

java com.HelloWorld

答案 2

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

也就是说,如果您有一个源文件,其 package 指令为 ,则预计该文件将位于该目录中。comcom

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

编译文件时,它将创建一个在目录中调用的类文件,例如HelloWorld.classcomcom\HelloWorld.class

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

所以,我复制了你的(带包)例子HelloWorld.javaC:\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!

您可能希望通读软件包教程


推荐