样式表未加载到作为 PKG 发布的模块化 JavaFX 应用程序中

问题描述

我有一个模块化的 JavaFX 应用程序。当我使用 IDE IntelliJ 运行它时,它完美地加载了所有样式表。

但是,当我将应用程序发布为 Mac 平台的 PKG 并尝试运行时,该应用程序没有应用任何 CSS。 PKG 文件在 Mac 上成功安装了 JavaFX 应用程序,但没有加载样式表。

应用按预期运行,但没有应用任何 css。

我正在使用 openJDK-15.0.2 并使用 jpackage 生成 PKG 文件文件夹结构:

Folder structure

获取资源:

Class clazz = SocketClientFX.class;        
Scene scene = new Scene(root);
scene.getStylesheets().add(clazz.getResource("/styles/Styles.css").toString());

解决方法

我通过在 module-info.java 中为每个资源文件夹添加“opens”解决了这个问题。

例如:

opens styles.common;
opens jsonFiles;
opens images.common;
opens styles.stevePane;
etc...

在代码中,每个资源的访问方式如下:

containerBorderPane.getStylesheets().add("/styles/stevePane/loadingWindow.css");

然后我再次构建了项目并创建了一个新的 PKG 文件。当我再次安装并运行它时,包括 CSS 文件在内的所有资源都已加载。

当通过getResource()访问资源时,如下所示,我们不需要在opens directive中添加module-info.java

scene.getStylesheets().add(clazz.getResource("/styles/Styles.css").toString());

谢谢@James_D 和@Slaw 的评论。