.jar错误 - 找不到或加载主类

2022-09-01 15:58:18

我试图将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\bin以及32位jre7\bin中的java.exe文件打开它时。我已经卸载并重新安装了我的jre和jdk,并重新创建了我的.class和.jar文件,但问题仍然存在。我正在赢8。

编辑:我试图按照以太的建议去做,但没有运气。我把HelloWorld.java放在path\com\stackoverflow\user\blrp中,编译了它,它的工作原理是输入

java com.stackoverflow.user.blrp.HelloWorld

在路径中。然后,我通过以下方式创建了清单和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没有(同样的错误)。我也尝试不做包的事情,只是清单中的类路径,同样的结果。

(另外,我在提出问题之前通过使用.bat文件解决了这个问题,但是让那个罐子工作仍然是甜蜜的。


答案 1

感谢jbaliuka的建议。我打开了注册表编辑器(通过在cmd中键入regedit),然后转到HKEY_CLASSES_ROOT >jarfile>shell>打开>命令,然后打开(默认)并将值从

"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*

"C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*

(我刚刚删除了javaw中的w.exe。之后,您必须右键单击jar->使用->选择默认程序->导航到java文件夹并打开\jre7\bin\java.exe(或java文件夹中的任何其他java.exe文件)。如果它不起作用,请尝试切换到javaw.exe,用它打开一个jar文件,然后切换回来。

我对编辑注册表一无所知,除了它很危险之外,所以你可能想在执行此操作之前备份它(在顶部栏中,File>Export)。


答案 2

当我在寻找上述问题的答案时,我发现了这个问题。但在我的情况下,问题是使用“en dash”而不是“dash”。检查您正在使用的破折号,它可能是错误的破折号。我希望这个答案可以加快其他人的搜索速度,这样的评论可以节省我一点时间。


推荐