Java FX无法加载Font Awesome图标

时间:2017-02-23 12:50:01

标签: java maven javafx javafx-8 font-awesome

我是JavaFX的新手。我使用以下代码加载使用Bootstrap,Angular等的本地HTML页面。

public class AppLauncher extends Application {
    public static void main(String[] args) {
        System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        WebView webview = new WebView();
        webview.getEngine().load(AppLauncher.class.getResource("/dashboard.html").toExternalForm());
        stage.setScene(new Scene(webview));
        stage.show();
    }
}

由于我的Java脚本具有来自不同域的XHR,因此我将其配置为允许跨域请求。 当我从Eclipse运行它时,一切正常。 我需要有一个可执行文件,所以我使用了maven-shade-pluginlaunch4j-maven-plugin。 可执行文件完美地创建,可以打开我的HTML页面。 但问题是UI不会呈现我的HTML页面中的font-awesome图标(也不会从创建的jar中呈现)。 我在页面中有fa-angle-downfa-bell-ofa-search。它们都没有显示出来。 请参阅图片When running from EclipseWhen running from exe/jar

什么导致它在转换为可执行jar或exe?

时不呈现fa图标

1 个答案:

答案 0 :(得分:1)

我有一个非常类似的问题,是的,正如上面的Master Po详细说明,我认为这是由于FontAwesome CSS引用了编译后无法访问的字体位置。 我通过在我的webview中添加额外的CSS来解决这个问题:

yourWebviewObject.getEngine().setUserStyleSheetLocation("data:,@font-face{font-family:'FontAwesome';src:url('"+getClass().getResource("path/to/fontawesome-webfont.eot").toExternalForm()+"');src:url('"+getClass().getResource("path/to/fontawesome-webfont.eot").toExternalForm()+"') format('embedded-opentype'),url('"+getClass().getResource("path/to/fontawesome-webfont.woff2").toExternalForm()+"') format('woff2'),url('"+getClass().getResource("path/to/fontawesome-webfont.woff").toExternalForm()+"') format('woff'),url('"+getClass().getResource("path/to/fontawesome-webfont.ttf").toExternalForm()+"') format('truetype'),url('"+getClass().getResource("path/to/fontawesome-webfont.svg").toExternalForm()+"?v=4.7.0#fontawesomeregular') format('svg');}");

我花了一些时间来弄清楚上面的内容(特别是setUserStyleSheetLocation()可以将数据放在自己的字符串中而不需要实际的CSS文件),所以我希望它可以帮助其他人。

作为背景,我使用hugo创建一个静态网站,我在JavaFX应用程序中用于帮助/文档。

这种方法的想法来自:here