【发布时间】:2019-04-07 14:19:03
【问题描述】:
在远离 Java 世界一段时间后,我正在尝试在 NetBeans 10 中使用 javafx11、jdk11 打包 javafx 应用程序。由于 Javafx 被排除在标准 jdk 之外,而 NetBeans 仍在 Apache 中孵化,因此事情比以前更艰难了。
幸运的是,我找到了this great tutorial 和this great answer,这让我可以在 NetBeans 中运行一个简单的 Hello World 应用程序。
但我不能让它在 IDE 之外工作:当使用输出的 jar 调用时,jre 会出现以下错误:
java.lang.NoClassDefFoundError: javafx/application/Application
所以我想我需要在 jar 中打包一个 javafx 运行时才能运行它,但我不知道该怎么做。
我找到了一些指针,但它们都使用命令行指向 javafx sdk,但我的目标不是安装了这个 sdk 的机器,而是希望将所有需要的东西(除了 jre 本身)打包到 jar 中。
非常感谢任何帮助。
【问题讨论】:
-
感谢您指出,事实上我做到了,问题是我对此有点不知所措:您指向教程的另一部分似乎并没有创建一个胖子-jar (“但是,如果您想使用 java 命令运行模块化应用程序,则需要 JavaFX SDK”)并且答案的另一部分似乎是指“模块化应用程序”,它似乎捆绑了整个 jdk,这不是什么我在找。抱歉,您很愚蠢,您显然是该主题的大师。
-
如果您有一个非模块化项目并且您不使用构建工具(Maven、Gradle),本教程将准确地展示如何为您的平台创建一个 fat-jar,甚至是一个跨平台平台脂肪罐。这不是最好的解决方案,但您仍然可以做到。
-
好的,我找到了相关部分。我想我可以尝试自定义 Ant 目标来执行这些命令。
-
试过了,它不起作用:如果我运行 jar,它会给出错误消息“错误:找不到或加载主类 hellofx.launcher”所以我将主类更改为“HelloFX " 然后我收到错误 "JavaFX 运行时组件丢失..."。这些命令的问题在于,虽然它们有帮助,但它们并没有真正解释如何打包所述运行时组件。如果我可以简单地被告知罐子里应该是什么以及它应该在哪里,我会自己弄清楚该怎么做,但只有一系列神奇的公式,如果没有,我会迷路不行。