无法从命令行运行已编译的 .classes 文件

4
我在命令行运行已编译的Java代码时遇到了一些问题。我使用IntelliJ IDE编写和编译它(如果在IDE中完成,则一切正常),但现在希望从命令行运行它。
使用javac从命令行编译也可以正常工作,但是使用java运行则不行。
我几乎确定这是一个classpath问题,但无法解决它。在发布此帖子之前,我搜索到一篇文章,告诉我运行“set PATH=\%PATH\%;"C:\Program Files\Java\jdk1.6.0_21\bin"命令,然后尝试运行Java。我还尝试了各种-cp和-classpath参数。错误是:
Exception in thread "main" java.lang.NoClassDefFoundError: Share/class
Caused by: java.lang.ClassNotFoundException: Share.class
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: Share.class.  Program will exit.

你能同时粘贴命令吗? - Mrki
我已经尝试过:java Share、java -cp "C:\Program Files\Java\jdk1.6.0_21\bin" Share,以及几个类似的变体。 - Drake
你执行该命令的目录中是否实际上有Share.class文件?也许尝试使用java -cp . Share(点表示当前目录)。 - morja
没有必要将类路径设置为java.exe的位置。只需在包含.class文件的目录中运行它,而不需要使用“.class”作为参数。 - Mrki
1个回答

8

你正在进行:

java -cp ... Share.class

Do

java -cp ... Share

如果它在一个软件包中

java -cp ... path.to.Share

您不应该将类file作为参数提供,而应该提供完全限定的类名称。

如果您的类位于当前目录并使用默认(空)包,则只需使用

java -cp . Share

或者
java Share

类路径不用于指向Java可执行文件,而是用于指向包含您的类文件(在包结构的根目录下)的各个目录/ jar文件。

另请参阅


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