Intellij中Javafx构件的制作方法 - 如何制作?

8

我一整天都在尝试将我的JavaFX应用程序打包成jar文件。我使用的是Java 1.7 update 7。

Oracle提供了一些信息,但它似乎散落在各个地方。Intellij几乎完成了这项工作,但我收到了以下错误:

java.lang.NoClassDefFoundError: javafx/application/Application

这似乎意味着我需要告诉Java jfxrt.jar的位置... 如果我将此jar添加到IntelliJ中的清单构建的类路径信息中 - ctrl+shift+alt+s -> Artifacts -> Output Layout选项卡 -> Class Path,那么我会得到另一个错误:
 Could not find or load main class com.downloadpinterest.code.Main

虽然感觉奇怪,但我需要将jfxrt.jar包括在我的类路径中...

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

有人能告诉我发生了什么吗?我之前有一个基本的GUI,运行得很好,但JavaFX似乎让事情变得复杂!

2个回答

4
您的假设是正确的,您需要将JavaFX添加到类路径中。
它位于[JDK]/jre/lib/jfxrt.jar中。
为了在运行时提供JavaFX,您可以将其与应用程序捆绑在一起,如Oracle guide所示,或者 使Java 7 Update 6成为您的应用程序要求,并在应用程序尽早方便的情况下将[JAVA_HOME]/lib/jfxrt.jar添加到类路径中。
第一种选项意味着您需要更多的工作,但确保所有用户都具有相同版本的库-并且您可以捆绑JRE,同时也可以这样做。 第二个版本没有提供这种确定性,但更容易实现。
作为第二个选项的变体-如果对您来说捆绑JRE实际上是可能的-,您还可以将其捆绑在您的分发中,然后包括一个shell脚本/批处理文件/可执行包装器,以使您的程序使用它。 这样,您就可以从选项I获得所有确定性,而只需从选项II中适度提高难度。

我注意到当我这样做时,Intellij只是在jar清单中添加了一个包含类路径的行(它不会将jfxrt捆绑在我的jar中)。这似乎会成为一个问题,当别人下载我的程序并尝试使用它时 - 即有些人有Mac电脑,有些有Linux,有些有Windows,并且jfxrt.jar的路径对于不同的人会有所不同。您知道解决此问题的任何方法吗? - Louis Sayers
谢谢,我已经问过Oracle是否有完整的Ant示例,因为我只能创建Ant脚本到一定程度。如果我找到或者成功创建一个,我会发布出来的! - Louis Sayers

4
我曾经有同样的问题。 但我找到了这篇博客文章:Packaging JavaFX 2 Applications in IntelliJ IDEA 12.1,展示了如何在Intellij 12.1中解决此问题。 显然,IntelliJ有能力生成一个特殊的“JavaFX应用程序”artifact。它会自动将所需的一切打包到您的jar文件中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接