我尝试将 HelloWorld 放入 .jar 文件并运行它,但它不起作用。我创建了java文件并输入程序,然后在cmd中写入:
javac HelloWorld.java
java HelloWorld
它奏效了。然后我进入了
echo Main-Class: HelloWorld >manifest.txt
jar cvfm HelloWorld.jar manifest.txt HelloWorld.class
得到输出
added manifest
adding: HelloWorld.class(in = 426) (out= 288)(deflated 32%)
然后我进入
java -jar HelloWorld.jar
HelloWorld.jar
第一行有效,而第二行给了我一个错误:
Error: Could not find or load main class path\HelloWorld.jar
这与我尝试使用 64 位 jre7\bin、jdk1.7.0_51\bin、jdk1.7.0_51\jre\中的 java.exe 文件打开它时得到的输出相同(在快速关闭的窗口中) bin,以及 32 位 jre7\bin。我已经卸载并重新安装了我的 jre 和 jdk 并重新创建了我的 .class 和 .jar 文件,但问题仍然存在。我是win8的。
编辑:我尝试按照 aetheria 的建议进行操作,但没有运气。我把HelloWorld.java放到path\com\stackoverflow\user\blrp下,编译好了,输入就可以了
java com.stackoverflow.user.blrp.HelloWorld
在路径中。然后我通过以下方式创建了 list 和 jar:
(echo Manifest-Version: 1.0
echo Class-Path: .
echo Main-Class: com.stackoverflow.user.blrp.HelloWorld) >manifest.txt
jar cvfm HelloWorld.jar manifest.txt com\stackoverflow\user\blrp\HelloWorld.class
得到输出
added manifest
adding: com/stackoverflow/user/blrp/HelloWorld.class(in = 454) (out= 312)(deflat
ed 31%)
但是,java -jar HelloWorld.jar 仍然有效,而 HelloWorld.jar 没有(同样的错误)。我也试过不做包的事情,只是 list 中的类路径,结果相同。
(另外,我在使用 .bat 文件提出问题之前解决了这个问题,但让那个 jar 工作起来还是很不错的。)
最佳答案
感谢 jbaliuka 的建议。我打开注册表编辑器(通过在 cmd 中键入 regedit)并转到 HKEY_CLASSES_ROOT > jarfile > shell > open > 命令,然后打开(默认)并更改值
"C:\Program Files\Java\jre7\bin\javaw.exe"-jar "%1"%*
到
"C:\Program Files\Java\jre7\bin\java.exe"-jar "%1"%*
(我刚刚删除了 javaw.exe 中的 w。)之后,您必须右键单击一个 jar -> 打开方式 -> 选择默认程序 -> 导航到您的 java 文件夹并打开\jre7\bin\java.exe (或您的 java 文件夹中的任何其他 java.exe 文件)。如果还是不行,尝试切换到javaw.exe,用它打开一个jar文件,然后再切换回来。
除了编辑注册表很危险之外,我对编辑注册表一无所知,因此您可能需要在执行此操作之前对其进行备份(在顶部栏中,文件>导出)。
关于java - .jar 错误 - 无法找到或加载主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21650851/