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

当我将我的类作为包的一部分并尝试从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;” 解决了这个问题。 有时在其他情况下,我会收到一条错误消息,指出无法找到主类文件或其他内容。

我究竟做错了什么?

假设你已经cd到C:/ projects而且HelloWorld.class在C:/ projects / com中,只需输入

 java com.HelloWorld 

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

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

HelloWorld示例中,期望HelloWorld.java文件存储在com目录中,如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  . 09/08/2013 01:55 PM  .. 09/08/2013 01:55 PM 135 HelloWorld.java 

然后我编译了HelloWorld.java

 C:\java>javac com\HelloWorld.java 

然后我跑了…

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

您可能希望阅读包教程

com目录的父目录运行该程序。

 java com.HelloWorld 

语法是:

 java -classpath /path/to/package-folder . 

所以你可以尝试: java com.HelloWorld ,它希望com/HelloWorld.class文件作为classpath出现,默认指向当前目录(如果没有指定)。

如果您在不同的文件夹中,请尝试指定classpath

 $ CLASSPATH=/path/to/package-folder/ java com.HelloWorld Hello World! $ java -cp /path/to/package-folder/ com.HelloWorld Hello World! $ cd /path/to/package-folder/ && java com.HelloWorld Hello World! 

有关进一步说明,请检查: 如何运行Java .class文件?

假设文件位于C:/ projects / com / HelloWorld,您可以尝试以下方法。

1. java -cp c:/projects com.HelloWorld

2. cd c:/projects
java com.HelloWorld

如果没有包装声明,会有一点变化。

1. java -cp c:/projects/com HelloWorld

2. cd c:/projects/com
java HelloWorld

或者,相对路径也可以。

编译java代码时,使用-d,在你的情况下,它会是

 javac -d . com.HelloWorld.java 

在上面的命令之后,java编译器生成一个名为“com”的文件夹,在“com”文件夹下,你会看到你的HelloWorld.class

然后在运行javac的同一文件夹下运行以下命令

 java com.HelloWorld 

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

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

在Java文件夹下创建一个名为com文件夹,并将HelloWorld.java放入com文件夹中。 然后再次运行javacjava

运行java类时不需要-cp标志,从二进制(jar)文件运行类或主程序时需要-cp标志。 从命令行运行主程序时,您需要确保在java文件中具有与包名相同的文件夹结构中的类,例如。

 home/user/foo java com.test.className here classNmae class file and exist under home/user/foo/com/test 

希望能帮助到你。

当您直接从’* .class’文件的文件夹执行’java’命令时,可能会出现这样的问题。 该命令应该从项目“父”目录执行。 以下文章对所有内容进行了详细解释:

http://javarevisited.blogspot.de/2015/04/error-could-not-find-or-load-main-class-helloworld-java.html

您应该首先在CMD中键入此命令来编译它,例如,您的文件位于c:\目录中:

 C:\com>javac HelloWorld.java 

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

 c:\com>java HelloWorld