2014-02-08 84 views
21

我试图将HelloWorld放入.jar文件并运行它,但它不起作用。我创建的Java文件和程序类型,然后在cmd中写道:.jar错误 - 无法找到或加载主类

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 

这是相同的ou当我试图用64位jre7 \ bin,jdk1.7.0_51 \ bin,jdk1.7.0_51 \ jre \ bin以及32位的java.exe文件打开它时,我得到了(在快速关闭的窗口中) jre7 \ bin中。我卸载并重新安装了我的jre和jdk,并重新创建了我的.class和.jar文件,但问题仍然存在。我在win8上。

编辑:我试图做aetheria建议,但没有运气。我把HelloWorld.java路径\ COM \计算器\用户\ 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的罐子的HelloWorld.jar工作,的HelloWorld.jar没有(同样的错误)。我也试过不做包装的事情,只是清单中的类路径,结果相同。

(另外,我通过使用一个.bat文件的问这个问题之前,解决了这个问题,但它还是会是甜的得到那个罐子的工作。)

+0

清单应打包为/META-INF/MANIFEST.MF解压缩任何jar文件以查看示例例如jre/lib/rt.jar – jbaliuka

+0

将空行打印到清单的末尾,它应该可以工作。 – jbaliuka

+0

echo会自动创建空行(没有空行,java -jar也不行),并且在创建jar时正确打包清单。 – Blrp

回答

13

谢谢jbaliuka的建议。我打开注册表编辑器(通过键入CMD注册表编辑器)和将要HKEY_CLASSES_ROOT> jar文件>壳>开>命令,然后打开(默认)并且改变值从

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

"C:\Program Files\Java\jre7\bin\java.exe" -jar "%1" %*在这之后,你必须右键单击一个jar - >打开 - >选择默认程序 - >导航到你的java文件夹并打开\ jre7 \ bin \ java。 (或任何其他java.exe文件在你的Java文件夹)。如果它不起作用,请尝试切换到javaw.exe,使用它打开一个jar文件,然后切换回来。

我对编辑注册表一无所知,除非它是危险的,所以在做这件事之前(在顶部栏中,File> Export),您可能需要备份它。

9

你总是可以运行此:

java -cp HelloWorld.jar HelloWorld 

-cp HelloWorld.jar将jar添加到classpath中,然后HelloWorld运行您编写的类。

要创建一个主类运行的JAR,没有包装,添加Class-Path: .到清单:

Manifest-Version: 1.0 
Class-Path: . 
Main-Class: HelloWorld 

我会建议使用package给你的类自己的命名空间。例如。

package com.stackoverflow.user.blrp; 

public class HelloWorld { 
    ... 
} 
+0

我试过了,看看编辑后的OP。 – Blrp

5

我在查找上述问题的答案时发现此问题。但在我的情况下,问题是使用'短划线'而不是'短划线'。检查你正在使用哪一个破折号,这可能是错误的。我希望这个答案可以加快别人的搜索速度,像这样的评论本可以为我节省一点时间。

+0

你用什么编辑器,Microsoft Word?或者你有一个特殊字符的键盘?我没有倒下,但这似乎是一个很少人会遇到的问题,因为它也会出现在任何使用破折号的程序中。 – Noumenon

+2

我应该更清楚,这是复制/粘贴问题的明确结果。原来的命令行有连字符,我将它们复制到我自己的版本中。在我将.JAR传递给2位同事之前,我一直坚持下去,他使用我的命令行参数运行它,在那里失败。然后是第二个编写自己的命令行参数的人,并验证它工作正常。这让我看到了ASCII代码中的命令,我发现它们的区别。感谢您的反馈。 – EuroTech

+0

我刚找到这个答案后,拼命搜查,并在我的桌子上敲我的头。我的问题是命令行被剪切并粘贴出Outlook。还有一件事要注意......谢谢@EuroTech – Ukko

0

I在使用jar文件安装设置时遇到同样的问题。 thta为我工作的解决方案是

  1. 打开命令提示符以管理员身份
  2. 转到jdk的bin目录(Ex.C:\程序Files \ Java的\ jdk1.8.0_73 \ BIN)
  3. 现在执行java -jar <<jar fully qualified path>>

它为我:)

+2

这不是问题。正如我在OP中所说的,在我问这个问题之前,'java -jar HelloWorld.jar'工作。另外,如果'bin'是你的'PATH'环境变量的一部分,你不需要去它。 – Blrp

1

有这个问题找不到答案,所以我开始寻找其他线程上,我发现我是让我的应用程序1.8,但由于某种原因,我的JRE出去d即使我记得更新它。我下载了8个垃圾箱,这个jar文件运行得非常好。希望这可以帮助。

相关问题