如何在命令提示符下运行属于包的 .class 文件?

42

当我把我的 .class 放在一个 package 中并尝试从 cmd 运行它时,我一直收到错误提示。

这是经过使用 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

请记住,javac 没有报错,并且只需删除 package com; 即可解决问题。有时在其他情况下,可能会出现“找不到主类文件”之类的错误信息。

我做错了什么?


2
HelloWorld住在哪里?它住在com/目录下吗? - MadProgrammer
我认为你没有“com”文件夹。 - ihsan kocak
它存储在我创建的目录C:\java中,其中包含HelloWorld.java和HelloWorld.class。 - user2666594
让我尝试将目录重命名为包名,看看会发生什么。 - user2666594
问题现已解决。原来我是在包文件夹内使用java命令,我必须向后cd才能使其正常工作。 - user2666594
13个回答

0

尝试使用绝对目录或将您的 HelloWorld.class 放入 ..\last_directory\com 中

1. java -cp .......\last_directory com.HelloWorld
2. java -cp .......\last_directory HelloWorld(with created com)

0
在Linux中有一个简单的解决方案,原理相同:
假设文件路径是/work/packageName/file.java,第一行内容如下:
package packageName;

在工作目录下的 /work/packageName/* 中:
只要 file.java 包含对该包中其他文件的引用,那么 javac file.java不能正常工作。解决方法是使用以下命令:
javac --class-path  ../  file.java

或者回到上一级目录 /work/* 并运行:

javac  ./packageName/Member.java

或者直接使用java来执行,而不是使用javac


-2

你应该先编译它,通过在CMD中输入以下命令,例如你的文件在c:\目录下:

C:\com>javac HelloWorld.java

之后你可以通过键入以下命令来运行结果:

c:\com>java HelloWorld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接