【问题标题】:Generating a portable .exe file (from a .jar) that will run on Windows生成将在 Windows 上运行的可移植 .exe 文件(来自 .jar)
【发布时间】:2015-08-08 03:05:46
【问题描述】:

我创建了一个使用 GUI 的小型 Java 应用程序,我的一些使用 Windows 的朋友要求我将其发送给他们。我想在安装等方面尽可能多地避免它们,所以我想知道哪个是最好的方法。

所以我从 NetBeans 构建了 .jar,当我运行它时,它运行良好。从那里开始,我尝试为 Windows 生成一个可移植的 .exe 文件,我可以将其发送给它们,并且它们可以在没有任何先前步骤的情况下直接打开(前提是它们具有 JRE)。所以我下载了 JSmooth、Jar2Exe 和 Launch4j,所有这些都生成了一个 .exe 文件,但是一旦我更改了它的位置,它就不再工作了,所以我认为这与 .jar 文件相比没有任何优势。

所以我想知道的是:有什么方法可以将所有内容打包到一个 .exe 中,无论它位于何处,都可以在 Windows 中始终运行?

以防万一:项目使用添加的库 JLayer(用于 Mp3)。

谢谢!

P.S.:总的来说,我是编程和计算机的新手,所以请耐心等待,不要想当然。

【问题讨论】:

  • 有几个 exe 包装器可用,我个人使用 exe4j,但它是商业的,但在我需要它的时候,它是唯一可用的 64 位包装器。您还可以使用许多安装程序包之一,例如 izpack。有些甚至还提供了安装 JVM 的功能,但我已经养成了将我希望人们使用的 JVM 嵌入到我的程序中的习惯;)
  • " 但是一旦我更改了它的位置,它就不再起作用了," - 不,它们起作用了- 你错过了其他东西。虽然从问题中不清楚..
  • 我的意思是,当我从最初创建的文件夹中运行生成的 .exe 文件时,它可以工作,但是一旦我更改它的位置(例如,通过将其复制到另一个文件夹或拖动它到桌面)我点击图标,没有任何反应,.exe 没有启动应用程序。我希望现在很清楚。也许我在生成 exe 文件之前缺少在 exe 包装器的选项中设置一些东西。
  • jar 是否依赖文件夹中的文件?移动它的位置可能会导致它找不到文件,这些文件没有绝对路径被指定为在 jar 的目录中。
  • 我认为应用程序在转移到另一个位置时无法运行的问题不在包装器本身。如果使用绝对路径或相对路径,则在设置中。

标签: java windows jar exe jsmooth


【解决方案1】:

您可以使用 Launch4j。在我的应用程序中,我只是创建了一个启动器。它是一个用于启动 jar 文件的小 .exe 文件。这样,我不必每次有新的 jar 文件时都创建 .exe 文件。我只是重命名 jar 文件,使其与 .exe 文件中设置的内容匹配。我将exe和jar文件放在同一个文件夹中。只要jar的执行对依赖和库没有问题,运行exe文件也应该没有问题。

【讨论】:

  • 这就是我认为我的包装器正在为我做的事情,因为一旦我将 .exe 和 .jar 放在不同的文件夹中,.exe 就无法再启动应用程序了。但不仅如此:既然你提到了它,在与 jar 文件 (/dist) 相同的文件夹中,还有一个包含库 (/lib) 的文件夹,所以我似乎没有成功将我的外部库打包到.jar 文件与 IDE。一旦我这样做,我会再试一次。谢谢!
【解决方案2】:

首先,确保您将所有外部库和外部链接(图像路径、文件路径等)捆绑到您的 .jar 文件中,因为一旦您从项目文件夹中移动 .jar 文件,它就无法访问外部链接没有了。

以下问题可以帮助您弄清楚如何做到这一点: How to bundle images in jar file 之后,您的 .jar 就可以导出了。

PS:嵌入外部库时要小心,以防它们是专有的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-25
    • 2010-09-28
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 2013-11-16
    • 1970-01-01
    相关资源
    最近更新 更多