OSGi 包中的 JavaFX 样式表

标签 java javafx osgi javafx-8 java-8

我已将“styles.css”放在我的包的根目录中,现在正试图弄清楚如何在代码中链接它。问题是 @.getStylesheets().add(_) 采用字符串而不是 URL,所以我知道的所有方法在这里都失败了:

拍摄 1:

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

Nov 15, 2013 2:04:47 PM com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
WARNING: Resource "styles.css" not found.

拍摄 2:

scene.getStylesheets().add(this.getClass().getResource("styles.css").toExternalForm());

NullPointerException

练习 3:

scene.getStylesheets().add(this.getClass().getClassLoader().getResource("styles.css").toExternalForm());

Nov 15, 2013 2:27:31 PM com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
INFO: Could not load stylesheet: bundle://5.0:1/styles.css

第 4 场:

scene.getStylesheets().add(myBundle.getEntry("styles.css").toExternalForm());

Nov 15, 2013 1:31:35 PM com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
INFO: Could not load stylesheet: bundle://5.0:0/styles.css

我正在使用 Felix-4.2.1Java-8 (build 1.8.0-ea-b115)JavaFX-8 (8.0. 0-ea-b115).

最佳答案

这里解释了为什么这不起作用:javafx jira RT-14177 . 由于您不能使用资源的“ExternalForm”,我通过直接读取输入流将其复制到临时文件中。

        InputStream inputStream = MainApp.class.getResourceAsStream("/styles/styles.css");
        File tempStyleSheetDest = File.createTempFile("javafx_stylesheet", "");
        tempStyleSheetDest.deleteOnExit();
        Files.copy(inputStream, tempStyleSheetDest.toPath(), StandardCopyOption.REPLACE_EXISTING);
        scene.getStylesheets().add(tempStyleSheetDest.toURI().toString());

我真的希望这对你有帮助。

乔纳森

关于OSGi 包中的 JavaFX 样式表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20000897/

相关文章:

java - 如何拦截弹出窗口的隐藏以验证字段

osgi - OSGI 中容器选择由多个包导出的包的标准行为是什么?

java - Jboss 7 OSGI 运行级别

java - 使用多个属性查找匹配对象

java - 字节码不兼容 - java.lang.InknownClassChangeError : Implementing class

java - 查找 ArrayList 对象 - 搜索不起作用?

java - 是否可以在 Vaadin 14 的一个组件中以内联模式使用两个 DatePicker?

javascript - 如何在单击按钮时从 JavaFX WebView 调用 JavaScript 函数?

java - 如何在 Ubuntu 20.04 上安装 JavaFX

java - 在 OSGi 容器中为 Jersey-Grizzly 服务器内的 Rest 服务配置响应对象(使用 Jersey 1x 预防 CORS 错误)