【问题标题】:Why does my jar file work perfectly on my computer but not on another computer?为什么我的 jar 文件在我的计算机上可以完美运行,而在另一台计算机上却不行?
【发布时间】:2012-11-04 03:35:09
【问题描述】:

最近我在 NetBeans 中开发了一个相当简单的 GUI 应用程序,在进一步开发之前,我决定在另一台计算机上测试该应用程序,因为我不太了解分发应用程序并想确保我是做对了。

在 NetBeans 中它运行良好,当我单击 Run->Clean and Build Project 时,它会按预期在我的项目的 dist 文件夹中创建 .jar 文件。当我从 dist 文件夹在我的计算机上运行 .jar 文件时,它会按预期运行。

然后我尝试在另一台计算机(从闪存驱动器)上以几种不同的方式运行它,但都不起作用:

  1. 仅将 jar 文件复制到我的闪存驱动器,尝试运行它,收到错误消息“找不到主类:MyApplicationPackage.MyApplication。程序将退出。”

  2. 在 NetBeans 中单击 File->Export Project->To Zip... 并将压缩文件夹复制到我的闪存驱动器。当我在另一台计算机上解压缩文件时,没有 dist 文件夹(我没想到会有一个)。

  3. 将整个项目文件夹复制到我的闪存驱动器上,并尝试在另一台计算机上运行 jar 文件,生成相同的错误消息。

如何让它在其他计算机上运行?有没有更简单的方法来分发应用程序?我不希望普通人知道如何解压缩文件、找到 dist 文件夹并运行 jar 文件。我可以以某种方式将所有内容合并到一个可运行的文件中吗?

编辑:我自己找到了解决方案:另一台计算机上的 java 版本不是当前版本。为了使应用程序运行,我打开了项目的属性窗口,在“源”选项卡下,底部附近有一个选项,上面写着“源/二进制格式”。将其更改为早期版本的 Java 使其可以在另一台计算机上运行。另一个(更好的)选择是在另一台计算机上升级到当前版本的 Java。

【问题讨论】:

    标签: java netbeans jar zip executable-jar


    【解决方案1】:

    你必须检查是否有一个 MANIFEST 文件来指示主类的位置。

    如果您使用的是 maven,则可以使用程序集插件,它将使用您指定的参数生成您的 MANIFEST 文件。

    <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                    <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                            <manifest>
                                    <addClasspath>true</addClasspath>
                                    <mainClass>com.blabla.Main</mainClass>
                            </manifest>
                            <manifestEntries>
                                    <SplashScreen-Image>splashscreen.png</SplashScreen-Image>
                            </manifestEntries>
                    </archive>
            </configuration>
    
    </plugin>
    

    编辑:

    【讨论】:

    • 我用 7-zip 打开 jar 文件,发现 MANIFEST.MF 文件包含以下内容: Manifest-Version: 1.0 Ant-Version: Apache Ant 1.8.3 Created-By: 1.7.0 -b147 (Oracle Corporation) Class-Path: X-COMMENT: Main-Class will be added by build Main-Class: MyApplicationPackage.MyApplication 所以 MANIFEST.MF 文件确实指出了主类的位置。我不知道 Maven 是什么,或者你发布的代码是什么意思,你能解释一下你对我的问题的回答吗?对于不知道如何在此评论中添加换行符以使其更具可读性,我深表歉意。
    猜你喜欢
    • 1970-01-01
    • 2011-03-30
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-21
    • 2017-12-10
    • 2020-06-26
    相关资源
    最近更新 更多