【问题标题】:JavaFX WebView font issue on MacMac 上的 JavaFX WebView 字体问题
【发布时间】:2017-06-16 14:29:11
【问题描述】:

一些网站显示乱码字符而不是正确的文本。它只发生在 Mac 上。

以 GMapsFX 为例:

Online site:

可能与 OS X 10.11 或 10.12 有关。我用 Java 1.8.0_121 对其进行了测试。

是否有针对此问题的修复或解决方法?

【问题讨论】:

  • 几个小时后,我找到了一种解决方法,这对我的应用程序来说没问题。我为WebEnginedocumentProperty 设置了一个监听器。然后,一旦文档可用,我就运行 webEngine.executeScript() 的 javascript 代码,即遍历我之前在浏览器中识别的所有元素,并设置内联样式,这将覆盖 css 文件中的字体:nodes[i].style.fontFamily = 'Serif'; .很讨厌,我知道,但这是我能找到的最好的解决方案......嗯,我认为这对你不起作用,因为你可能有动态 HTML

标签: java macos javafx


【解决方案1】:

就我而言,该错误与系统字体无关。我通过为 Web 引擎设置用户代理解决了这个问题。这是我使用的字符串(Windows x64 上的 Firefox):

Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0

【讨论】:

  • 假装是 Windows,当你是 Mac 时可能不是一个好主意。它可能会导致其他意想不到的副作用。我这样修复它:engine.setUserAgent(engine.getUserAgent().replace("Macintosh; ", "")); 我相信问题是:提供字体的服务器使用 userAgent 来确定要发送的字体。当它由于误导性的 userAgent 而出错时,它会提供错误的。此外,我认为 Mac 无法处理交付的格式,而您最终会遇到乱码。
【解决方案2】:

请在 java 应用程序启动时加载系统中的所有字体。 但不是最佳答案...对不起

List<String> fontFamilies = Font.getFamilies();
for (String fontFamily: fontFamilies) {
   Font.font(fontFamily);
}

【讨论】:

    【解决方案3】:

    有一个特定的 OpenJDK 版本似乎没有这些问题。如果您是受影响的 Mac 用户,请按照以下说明切换到该版本的 OpenJDK。

    下载并安装 OpenJDK 11 版本的 Azul 构建找到 here(滚动到页面底部)记得选择 JDK FX 版本(不是任何其他版本)。

    建议:删除其他版本的 OpenJDK,以免您不小心使用错误的版本启动 JAR(this 视频显示如何)

    安装后,java --version 命令应该会给出如下输出:

    openjdk 11.0.12 2021-07-20 LTS
    OpenJDK Runtime Environment Zulu11.50+19-CA (build 11.0.12+7-LTS)
    OpenJDK 64-Bit Server VM Zulu11.50+19-CA (build 11.0.12+7-LTS, mixed mode)
    And `whereis java` should output `/usr/bin/java`
    

    推荐:设置JAVA_HOME/JDK_HOME系统变量指向/Library/Java/JavaVirtualMachines/zulu-11.jdk/Contents/Home

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多