JavaFX:无法加载二进制样式表

标签 java css javafx javafx-8

我使用

从我的 css 文件(位于 module/src/main/resources/styles 中)创建了二进制样式表

javapackager -createbss -srcdir 。 -outdir .

根据 this answer以及 this report 中的推荐我用

加载它们

scene.getStylesheets().add("styles/style.css");

并删除了 .css 文件,只是为了测试 JavaFX 确实会查找现有的 .bss 文件,即使它们被引用为 .css。

但是,运行该应用程序会出现以下错误:

2017 年 2 月 3 日下午 3:42:47 com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged 警告:找不到资源“styles/style.css”。

检查 loadStylesheetUnPrivileged() 我可以看到它确实可以找到资源文件夹中的文件并开始读取它们,但在 DataInputStream.readUTF() 中失败并出现 EOFException。然后,正如预期的那样,它尝试查找我删除的 .css 文件,并在明显失败时给出上面的消息。

我正在研究 Java 8u40,但也尝试过 8u112,具有相同的行为。

我应该在 .css 文件中查找是否有任何内容可能导致生成的 .bss 无效?我找不到任何有关该技术限制的文档。

我很乐意提供任何缺失的信息。

更新

我已将 .css 减少到最小,但相应的 .bss 仍然无法读取。这排除了不支持的关键字的问题。作为引用,这里是最小化的 .css:

.button {
    -fx-background-color: blue;
}

另一方面,我创建了一个小型测试应用程序(与 the answer mentioned above 中的非常相似)加载转换为 .bss 的相同最小 .css,并且它按预期工作。两者 (8u40) 中使用的 Java 版本相同,javapackager 也相同。测试应用程序:

public class Main extends Application {
    @Override
    public void start(Stage stage) throws IOException {
            FXMLLoader loader = new FXMLLoader(getClass().getResource("/Mainwindow.fxml"));
            AnchorPane ap = loader.load();
            ap.getStylesheets().add("styles/style.css");

            Scene scene = new Scene(ap);
            stage.setScene(scene);
            stage.show();
    }
}

正如预期的那样,生成的二进制文件也是相同的: link to image here, not enough rep to embed :)

我不确定环境中的什么可能导致主应用程序无法加载完全相同的 .bss?

最佳答案

这确实是环境上的差异:当resources插件在构建时将.bss文件从源目录复制到jar或classes文件夹中时,maven会过滤.bss文件。这本质上是破坏了文件。

因此解决方案是在元素的 pom.xml 中添加一个 exclude 子句:

<project>
  ...
  <build>
    ...
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <excludes>
          ...
          <exclude>**/*.bss</exclude>
        ...

关于JavaFX:无法加载二进制样式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42028129/

相关文章:

JavaFX 播放 mp3

javafx 使按钮填充宽度

绑定(bind) netbeans 组合框所选项目时出现 Java PropertyResolutionException

html - 我的 Bootstrap 导航栏不工作

java - 如何将 jar 文件转换为其中包含 MySQL 的可执行文件?

html - 为什么我的背景图片不显示

javascript - 过渡期不当行为

java - 尝试编写Java程序来播放mp3文件

java - JAXB异常 : SaveButton nor any of its super class is known to this context

java - 为什么 Java 文件中只有 1 个公共(public)类