java - .jar 错误 - 无法找到或加载主类

标签 java jar

我尝试将 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/

相关文章:

java - 以生产就绪方式执行 bazel-buildfarm,无需 "bazel run"

java - 如何从目录中选择特定的输入文件到Mapreduce程序

java - 如何在选项卡 Activity 中调用微调器?

java - 根据 Activity 配置文件或 yml 属性值启用/禁用数据库连接

java - 如何在 Java 中导入 JAR 和包

java - 如何向 Java 应用程序添加启动/停止功能以注册为服务

Java Flight Recorder 不报告任何文件 I/O 事件

java - Websphere httpclient NoSuchMethodError org.apache.http.conn.Scheme

java - 如何使 Proguard 适应 .jar 并隐藏我的私有(private)方法?

java - 运行时执行 (JAR) 找不到 Java CLASSPATH 和连接器 J