我已将“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.1、Java-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/