30

第一:我意识到这个问题应该很简单,很多人似乎都经历过。但是,看来我的问题可能与现有帖子略有不同。

我正在使用 NetBeans 编译 Java 应用程序。构建完成后,输出会正确进入 dist\ 文件夹。jar 文件在那里。如果我转到命令行,请导航到该文件夹​​,然后调用以下命令:

java -jar Prosperity.jar

一切正常。显然,应用程序的名称是 Prosperity。以下命令也可以正常工作:

javaw -jar Prosperity.jar

但是,双击 .jar 文件会给出消息:“找不到主类:”,然后给出 .jar 文件的路径。我已经检查了一百次 META-INF 文件夹存在于 .jar 文件中,并且其中存在一个具有正确主类名称的 MANIFEST.MF。我还检查了主类 (App.class) .class 文件是否存在于 .jar 文件中。

所以问题是:双击一个文件和在上面运行 javaw 有什么区别?它不只是运行,真是令人沮丧!

谢谢你能给我的任何方向,我在这里扯头发!

4

6 回答 6

25

也许您的文件关联搞砸了。在命令提示符下,尝试运行

ftype | find "jarfile"

在我的 64 位 Windows 7 计算机上,显示

jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*

你也可以改变它ftype

ftype jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*
于 2011-03-25T04:31:04.453 回答
11

刚找到这个帖子...

如果只是双击jar文件而不是在cmd启动时出现问题,可能是因为JRE的版本错误(6代替了7)。

只需在 regedit 中更改值:

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\jarfile\shell\open\command] "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*

到 :

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

如果更新这个值应该没有问题。


注意:在 Windows 上切换 32 位和 64 位版本:

->"C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*将使用 64 位版本的 JRE ->"C:\Program Files (x86)\Java\jre7\bin\javaw.exe" -jar "%1" %*将使用 32 位版本的 JRE

于 2012-03-04T11:02:11.443 回答
1

搜索您的注册表并检查后续项目

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Applications\javaw.exe\shell\open\command]
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\""


[HKEY_CLASSES_ROOT\jarfile\shell\open\command]
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\""


[HKEY_CURRENT_USER\Software\Classes\Applications\javaw.exe\shell\open\command]
@="\"C:\\Program Files (x86)\\Java\\jre6\\bin\\javaw.exe\" -jar \"%1\""
于 2012-05-31T15:41:31.293 回答
1

我也遇到了这个错误。我使用命令提示符检查了文件关联,一切都是正确的。直到我尝试从命令行运行 .jar 时java -jar MyProgram.jar,它才真正向我展示了问题的根源。

事实证明 .jar 是在 JDK 7 下编译的,而我只运行 JRE 6。这是提示中给我的错误,导致我找到了真正的解决方案:

Exception in thread "main" java.lang.UnsupportedClassVersionError: MyProgram/Program : Unsupported major.minor version 51.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(Unknown Source)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: MyProgram.Program. Program will ex
it.
于 2012-11-18T00:44:15.200 回答
0

我只是遇到了完全相同的问题,以相同的方式修复。我不得不完全删除关联,而不仅仅是用户自定义,然后重新安装 JRE。

修复前的关联仍然是:

jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*

之后(相同):

jarfile="C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -jar "%1" %*
于 2011-06-02T03:18:59.500 回答
0

如果以上方法都不能解决问题,请尝试从你的电脑中删除.jar文件类型(你可以google一个名为Unassoc.exe的软件删除文件类型),然后问题就解决了!(至少,这是我的情况!)

于 2012-04-22T15:19:09.503 回答