如何从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
文件夹中。 然后再次运行javac
和java
。
运行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’命令时,可能会出现这样的问题。 该命令应该从项目“父”目录执行。 以下文章对所有内容进行了详细解释:
您应该首先在CMD中键入此命令来编译它,例如,您的文件位于c:\目录中:
C:\com>javac HelloWorld.java
之后,您可以通过键入以下命令来运行结果:
c:\com>java HelloWorld