我是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-plugin
和launch4j-maven-plugin
。
可执行文件完美地创建,可以打开我的HTML页面。
但问题是UI不会呈现我的HTML页面中的font-awesome
图标(也不会从创建的jar中呈现)。
我在页面中有fa-angle-down
,fa-bell-o
,fa-search
。它们都没有显示出来。
请参阅图片When running from Eclipse和When running from exe/jar
什么导致它在转换为可执行jar或exe?
时不呈现fa图标答案 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