我的JavaFx应用程序从源代码运行得很好,但是当我编译为单个 jar 文件时,出现错误:
错误:缺少 JavaFX 运行时组件,运行此应用程序需要这些组件。
我正在Maven用作我的存储库管理器,并且我的 Maven 安装成功。
注意:在我的Intellij构建工件中,我可以看到Intellij包含JavaFx及其所有库
Ste*_*fan 14
a) 对于我的 maven 项目,诀窍是使用一个不从 javafx.application.Application 继承的额外入门类:
public class GUIStarter {
public static void main(final String[] args) {
GUI.main(args);
}
}
Run Code Online (Sandbox Code Playgroud)
JavaFx 依赖项包含在我的 pom.xml 中,如下所示:
<!-- JavaFx -->
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-base</artifactId>
<version>12</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>12</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics </artifactId>
<version>12</version>
<classifier>win</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>12</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-web</artifactId>
<version>12</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-media</artifactId>
<version>12</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-swing</artifactId>
<version>12</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
为了在构建中包含 fxml 文件,您可能需要将它们定义为资源:
!-- define JavaFx files as resources to include them in the jar -->
<resource>
<directory>${basedir}/src/main/java/foo/baa/view</directory>
<filtering>false</filtering>
<targetPath>foo/baa/view</targetPath>
</resource>
Run Code Online (Sandbox Code Playgroud)
b) 作为替代方案,可以使用额外的 maven 插件“javafx-maven-plugin”来构建 javafx 应用程序,请参阅https://openjfx.io/openjfx-docs/#maven 上的示例项目(这不适用于我。我有几个 pom 文件,想在子项目中引用 javafx 依赖项。javafx-maven-plugin 找不到我的主类。)
geo*_*kal -1
在 Java 11 中,JavaFX 组件已被删除到它们自己的 SDK 中,因此当您运行它时,它将无法在运行时找到它们。
JavaFX 页面提供了使用说明:https://openjfx.io/openjfx-docs/#install-javafx
简而言之,您必须通过添加 javafx 模块来编译/运行,或者作为命令行上传递的选项,或者使用模块化项目。
我发现 Maven 和 IntelliJ 的模块化项目最适合我。https://openjfx.io/openjfx-docs/#IDE-Intellij
在模块化方法中,您有一个module-info.java文件描述您的项目“需要”的所有模块,并允许您将它们“打开”到其他模块。如果你有一堆 Maven 依赖项,你也必须将它们添加到需求列表中。(IntelliJ 可以使这变得简单 - 找到代码中有关 no require 的错误并按 alt-enter)
一旦一切都与模块等一起工作,我必须使用 Maven 阴影插件制作一个 Fat Jar,将所有东西放在一起。然后就可以从命令行运行 jar 了。
然而,在我的 Java 11 代码 @#$%@# 经过 2 天的痛苦后,我回到了 Java 8(使用最新版本的 correto SDK),因为 Java 11 没有打包,IntelliJ 无法做到这一点为你。
| 归档时间: |
|
| 查看次数: |
13467 次 |
| 最近记录: |