JavaFx无法加载@ font-face字体,因为com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged

前端之家收集整理的这篇文章主要介绍了JavaFx无法加载@ font-face字体,因为com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经问了一个类似的问题 here,但似乎不清楚,因为我有很多代码在项目中,不能发布在这里所以请不要标记为重复.

因此,我决定创建一个新的项目,只需一个标签,使代码小而干净,并消除其他潜在的嫌疑犯我得到的错误.

所以这里是我的Java源代码

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        Group root = new Group();

        Label label = new Label("Sample Label");
        label.setId("sampleLabel");
        root.getChildren().add(label);

        Scene scene = new Scene(root,300,275);
        scene.getStylesheets().add(getClass().getResource("applicationStyles.css").toExternalForm());
        primaryStage.setTitle("Hello World");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

这是我的css文件

/**/
@font-face {
    font-family:'Roboto';
    src:url("Roboto-Thin.ttf");
}
#sampleLabel{
    -fx-font-family: Roboto ;
}

这是我在Intellij Idea中遇到的错误

Dec 02,2015 9:16:34 AM com.sun.javafx.css.StyleManager loadStylesheetUnPrivileged
INFO: Could not load @font-face font [file:/C:/Users/UserName/Desktop/Java8%20projects/TeamViewer/out/production/TeamViewer/sample/Roboto-Thin.ttf]

All the project files are in one package and the font file is also present in the out>production>TeamViewer>sample>Roboto-Thin.ttf. I also upgraded from jdk-8u65 to jdk-8u66

谢谢,非常感谢任何帮助.

解决方法

我找到了可能的原因和解决办法:
在引擎盖下,css-loader使用Font.loadFont函数将字体加载到CSS中.
Font.loadFont如果失败,则返回null,这给出了“警告”.

似乎这个功能不能用它的路径/ url-string.
因此,您需要解决路径,然后将其替换为空格.
这意味着您必须使用代码加载字体代替CSS(现在).

在Clojure,我的工作如下所示:

(require '[clojure.java.io :as cio])
(require '[clojure.string :as s])
(-> "fonts/SourceCodePro-Regular.ttf" 
  cio/resource 
  str 
  (s/replace "%20" " ") 
  (javafx.scene.text.Font/loadFont  10.))

猜你在找的Java相关文章