【问题标题】:How to distribute my Java program so that it is runnable by double-clicking a single file?如何分发我的 Java 程序,以便通过双击单个文件来运行它?
【发布时间】:2011-10-31 19:46:43
【问题描述】:

我有一个 Java 富客户端桌面应用程序。我想在工作中的一些计算机上分发,但我以前从未做过这样的事情。在我的工作场所,人们对计算机不太了解,因为这是一份学生工作,所以我不会在那里待太久,如果我可以让我的程序在人们加倍时可以运行,我会很高兴。 - 点击它。

我也不想手动安装 JRE 来运行它。基本上,我想知道的是如何通过双击使我的java应用程序轻松运行(即使它只是在windows上也可以)。我很确定我需要将正确的 JRE 版本打包在一起,但我不知道这样做的正确方法是什么。

我在一些网站上读到,您不应该将 JRE 与您的程序一起打包,因为它会使人们拥有多个不同的版本,其中一些版本已经过时,并且会导致安全问题,但在这种情况下这不是问题,因为将要运行我的应用程序的计算机没有连接到互联网,并且仅用于运行该程序。

有点相关的问题:由于我的应用程序当前是一个 Eclipse 项目,我使用相对路径(例如:img/test.png)获取我的资源,例如图标、图像、SQLite 数据库(用于读取和写入)等。

我是否必须更改其中任何一条路径才能让它们在打包时也能继续工作?

【问题讨论】:

标签: deployment installation java java-web-start


【解决方案1】:

如果您发现难以实施上述方法。您可以继续使用这种简单的方法。

在某个位置创建一个文件夹 lib。将您的应用程序使用的所有 jar 放入其中。如果您能够为您的应用程序创建一个 jar,那么您也可以将 application.jar 放入 lib 文件夹中。在同一位置创建一个批处理文件,其中将包含您的主类的 java 命令。您的批次中的文本可能看起来与此类似:

set path="\lib\"
java -cp %path% package1.package2.MainClass

如果您有任何其他依赖项,例如:如果您在 img/icon.jpg 下的代码中使用图像。然后你只需要将 img 文件夹也移动到这个位置。

只需使用 winrar 压缩这些文件并共享。在提取 zip 后运行批处理文件将启动您的 java MainClass,而不管它在客户端系统中的位置。

PS:如果您无法为您的应用程序创建 jar 并将其放置在 lib 文件夹中,只需将包含类文件的 bin 文件夹复制并粘贴到该位置并相应地更改批处理文件以在 bin 中查找类。

【讨论】:

    【解决方案2】:

    轻松安装 Java 应用程序的更好选择。使用 GUI 是使用Java Web Start 启动它。对于用户来说,JWS 是“一键式”安装选项,可以(安装和启动应用程序。然后)添加桌面快捷方式和菜单项。 JWS 发布意味着您需要完成更多工作,但对最终用户来说却是轻而易举的事。

    为确保存在合适的 JRE 来运行应用程序。请使用 deployJava.js(有关更多详细信息,请参阅 JWS 链接)。需要重新配置脚本才能从本地网络获取 JRE 安装程序 - 默认是从 Oracle 获取。

    大部分资源应打包在 Jar 文件中并与应用程序一起提供。但对于 DB,请使用 JNLP ExtensionInstallerService 调用 DB 安装程序。


    ..Java Web Start 是一种链接(或者我可以将其设置为桌面上的快捷方式),如果未安装 JRE,用户将单击它来安装 JRE 并运行程序,或者只是运行如果计算机上存在 JRE,则程序。

    它的工作方式是在本地 Intranet 上创建一个网页。当用户访问页面时,脚本会检查合适的 JRE。

    • 如果存在,它会将链接写入启动文件。
    • 如果没有 JRE,或者版本太低,它会引导用户安装它(只需在提示时单击“确定”即可)。然后它会将链接放入应用程序。

    然后我可以配置链接以从我们网络上的服务器获取 JRE。

    这是您需要重新配置脚本的部分。 AFAIR 脚本公开了一个用于查找 JRE 的 URL - 可以更改为指向 Intranet 上的某个位置。

    ..所以“Web”只是名称而已,计算机不必连接到互联网即可进行这项工作,对吧?

    是的。 JWS 对于 Java 富客户端来说是一项很棒的启动技术,但名称选择不当。

    【讨论】:

    • 我明白了,非常感谢您提供的信息,它一定会派上用场的!只是为了确保我理解正确,Java Web Start 是一种链接(或者我可以将其设置为桌面上的快捷方式),如果未安装 JRE,用户将单击它来安装 JRE 并运行程序,或者如果计算机上存在 JRE,则只运行该程序。然后我可以配置链接以从我们网络上的服务器获取 JRE。所以“Web”只是名义上的,计算机不一定要连接到互联网才能工作,对吧?
    • 查看编辑。如果你找到了那个信息。方便,请随时对我的答案进行投票。 ;)
    • 顺便说一句 - 我链接到 ExtensionInstallerService 演示的页面。有很多独立的例子。它们带有所有代码,以及一个应该很容易导入到 Eclipse 等主要 IDE 的构建文件。让他们体验一下它的工作原理以及它可以为您和您的用户做些什么。
    • 非常感谢您的回答,非常感谢!这对我有很大帮助,我正在阅读您发布的链接中的代码,我将对其进行测试。
    【解决方案3】:

    要通过双击运行问题,您可以将其分发为jar 文件或批处理文件以调用jar 文件。
    对于安装部分,您可以创建一个批处理文件来检查 java 是否存在,如果不存在则调用安装程序。
    编辑:
    批号:

    IF DEFINED JAVA GOTO ok
    java-installer.exe
    GOTO end
    :ok
    your-application.jar
    :end
    

    【讨论】:

    • 看起来不错,但这不只是检查是否存在任何 Java 版本吗?假设安装的 Java 版本是 1.3,而我在开发环境中使用的是 1.6,这不会导致问题吗?
    【解决方案4】:

    您正在寻找的是一个 JAR 文件。在eclipse中,制作Jar文件非常容易。具体来说,您需要右键单击您的项目,转到 Export,然后选择“Runnable Jar”。小心文件夹的路径。您可能需要在 Jar 文件旁边保留一个资源文件夹。您可能需要提供更多细节才能获得准确的答案。通常,Resources 文件夹与 JAR 文件位于同一位置(在您计算机上的同一文件夹中)。

    【讨论】:

    • 我知道 JAR 文件,但我从未使用过它们,而且在 JDeveloper IDE(我们在学校使用的)中看起来很复杂。我将尝试您刚才在 Eclipse 中提到的内容,看看它的效果如何。我仍然需要确保计算机上已经存在 JRE,对吗?
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 2014-04-15
    • 2011-05-24
    • 2012-07-04
    • 2012-01-23
    • 2019-10-08
    • 2016-07-29
    • 2012-01-20
    相关资源
    最近更新 更多