【问题标题】:"Could not find the main class" when double-clicking .jar file双击 .jar 文件时出现“找不到主类”
【发布时间】:2011-07-22 15:13:31
【问题描述】:

首先:我意识到这个问题应该很简单,而且很多人似乎都经历过。但是,我的问题似乎与现有帖子略有不同。

我正在使用 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 有什么区别?它不会只是运行,真是令人沮丧!

感谢您给我的任何指导,我在这里扯头发!

【问题讨论】:

  • 似乎 Java 不知何故认为我的主类实际上被命名为我正在运行的 jar 文件的 PATH。不知道它是怎么想出来的。它似乎忽略了清单中的值并寻找名称为:C:\Users\MyUser\MyApp\Prosperity.jar 的主类。我假设如果我能弄清楚它如何成为它正在寻找的主类的名称,那么我可以解决问题。

标签: java command-prompt mainclass javaw


【解决方案1】:

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

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" %*

【讨论】:

  • 这是票。为了真正让事情动起来,我下载了一个名为 unassoc 的程序,其目的是删除所有文件关联的踪迹。另外值得注意的是,我的应用程序安装正在对 JRE 进行 静默 安装,这(当然,静默!)没有正确关联 .jar 文件。所以我不得不将主程序安装更改为不再进行静默安装,并清理我的文件关联。重新安装 JRE 后,我可以通过双击 .jar 文件来执行它。只是希望我知道文件关联被破坏时的样子......
  • 很高兴看到您成功了。我会假设错误的关联缺少-jar 参数。这会导致你提到的错误。
  • 基于“似乎 Java 不知何故认为我的主类实际上被命名为 PATH”我认为发生的事情是 %1 在它们周围没有引号,并且 jar 是位于包含空格的路径中。
  • 感谢两位的帮助!那真是一场噩梦。当简单的事情出错时,我真的很讨厌......
  • 这很奇怪,因为我有同样的问题,但它与我生成 jar 的方式不同。就像在 Eclipse 可运行 jar 中一样工作正常,而使用 fat-jar 插件我看到了同样的问题。另外,几乎所有其他用户都有这个问题,这不是很奇怪,如果我打包我的应用程序,潜在用户将不知道如何更改文件关联?你认为删除文件关联是这个问题的唯一原因吗?
【解决方案2】:

刚刚找到这篇文章...

如果你只是双击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

【讨论】:

  • 同理。作为替代方案,您可以使用已批准答案中的ftype 命令(使用新路径)。
【解决方案3】:

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

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\""

【讨论】:

    【解决方案4】:

    我也遇到了这个错误。我使用命令提示符检查了文件关联,一切都是正确的。直到我尝试使用java -jar MyProgram.jar 从命令行运行 .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.
    

    【讨论】:

      【解决方案5】:

      我刚刚遇到了完全相同的问题,以同样的方式解决了。我不得不完全删除关联,而不仅仅是用户自定义,然后重新安装 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" %*
      

      【讨论】:

      • 抱歉,本来是要评论的
      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-10
        • 2018-06-29
        • 1970-01-01
        • 2013-12-24
        • 2014-12-14
        • 2020-02-28
        • 2014-08-07
        • 1970-01-01
        相关资源
        最近更新 更多