【问题标题】:Intellij Javafx artifact - how do you make it?Intellij Javafx 神器——你是怎么做到的?
【发布时间】:2012-08-27 13:34:40
【问题描述】:

我整天都在尝试将我的 javafx 应用程序转换为 jar 文件。我正在使用 Java 1.7 更新 7。

Oracle 有some information,但它似乎分散在各处。 Intellij 几乎可以完成这项工作,但出现以下错误:

java.lang.NoClassDefFoundError: javafx/application/Application

这似乎是说我需要告诉 java jfxrt.jar 在哪里......如果我将此 jar 添加到我的类路径信息中,以在 intellij 中构建清单 - ctrl+shift+alt+s -> Artifacts ->输出布局选项卡 -> 类路径,然后我得到另一个错误:

 Could not find or load main class com.downloadpinterest.code.Main

在我的类路径中包含 jfxrt.jar 似乎很奇怪......

我也尝试过创建一个 ant 脚本,但我觉得 IntelliJ 已经完成了 90% 的工作 - 我只需要一些帮助来弄清楚为什么我需要包含 jfxrt.jar,以及为什么找不到我的 Main 类(我猜我需要以某种方式将其添加到类路径中?)。

谁能告诉我发生了什么?我之前有一个基本的 gui,它运行良好,但 JavaFX 似乎让生活变得复杂!

【问题讨论】:

    标签: intellij-idea javafx jar executable-jar artifact


    【解决方案1】:

    您的假设是正确的,您需要将 JavaFX 添加到类路径中。
    它位于[JDK]/jre/lib/jfxrt.jar

    要在运行时提供 JavaFX,您可以将其与您的应用程序捆绑在一起,如 Oracle guide 所示 使 Java 7 Update 6 成为您的应用程序的要求,然后尽早将 [JAVA_HOME]/lib/jfxrt.jar 添加到应用程序的类路径中。

    第一个选项意味着您需要做更多的工作,但要绝对确保所有用户都拥有相同版本的库 - 您也可以在使用 JRE 时捆绑 JRE。 第二个版本不提供这种确定性,但更容易实现。

    作为第二个选项的变体 - 如果您实际上可以捆绑 JRE - 您也可以将它捆绑在您的发行版中,然后包含一个 shell-scripts/batch-file/executable-wrapper 来制作您的程序用它。 这样一来,您就可以从选项 I 中获得所有确定性,而选项 II 只会适度提高难度。

    【讨论】:

    • 我注意到,当我这样做时,Intellij 只是在 jar 清单中添加了一行,其中包含类路径(它没有在我的 jar 中捆绑 jfxrt)。当其他人下载我的程序并尝试使用它时,这似乎会成为一个问题 - 即有些人有 mac、一些 linux、一些 windows,并且 jfxrt.jar 的路径对于不同的人会有所不同。你知道怎么解决这个问题吗?
    • 谢谢,我问过 oracle 是否有完整的 ant 示例,因为到目前为止我只设法创建了 ant 脚本。如果我找到一个或设法创建一个,我会发布一个!
    【解决方案2】:

    我遇到了同样的问题。 但我发现这篇博文:Packaging JavaFX 2 Applications in IntelliJ IDEA 12.1 展示了如何在 Intellij 12.1 中进行操作

    显然 IntelliJ 有能力生成一个特殊的“JavaFX 应用程序”工件。它会自动将所需的所有内容捆绑到您的 jar 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-11
      • 2010-10-21
      • 2011-12-18
      • 2020-08-13
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多