JavaFX WebView在Mac上出现字体问题

8
一些网站在Mac上显示的是乱码而不是正确的文本信息。比如,使用GMapsFX时:enter image description here。另外一个在线网站也有同样的问题:enter image description here。这可能与OS X 10.11或10.12有关系。我已经测试过Java 1.8.0_121了。是否有任何解决方案或变通方法来解决这个问题呢?

2
经过几个小时的努力,我找到了一个解决方法,对于我的应用程序来说还不错。我设置了一个监听器来监听WebEnginedocumentProperty。然后,一旦文档可用,我通过webEngine.executeScript()运行一个JavaScript代码,该代码正在浏览器中遍历我之前识别的所有元素,并设置内联样式,这将覆盖CSS文件中的字体:nodes[i].style.fontFamily ='Serif';。相当恶心,我知道,但那是我能找到的最好的解决方案...嗯,我想那对你可能行不通,因为你可能有动态HTML。 - JohnnyAW
3个回答

4
我的情况下,错误与系统字体无关。我通过设置 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无法处理所发送格式,结果只能得到乱码。 - Frederic Leitenberger

1

当Java应用程序启动时,请加载系统中的所有字体。但这不是最好的答案……抱歉。

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

0

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

下载并安装Azul构建的OpenJDK 11版本,可以在这里找到(滚动到页面底部)。记得选择JDK FX版本(而不是其他版本)。

建议:删除其他版本的OpenJDK,以免意外使用错误的版本启动JAR文件(视频展示了如何操作)。

安装后,命令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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接