彻底解决JavaFx在Linux中文无法正常显示的问题(究其根本原因) JavaFX 使用 JPackage 打包后,在 Linux 中运行时简体中文将无法正常显示,你看见的全是方框。网上有各种各样的解决办法,可以说都有用,但终究没有找到根本原因。网上查了一下,有大概几种解决办法:1 Linux 缺中文字体(较新的发行版都有中文支持了,确实没有需要安装);2JavaFX 程序中代码加载字体;3 JavaFx 程序中代码设置字体;4 JavaFx 程序中样式表设置字体;5 配置JAVA_HOME/jre/lib/fonts/fontconfig.properties(JavaFX打包后没有这个了);6 复制Windows的字体到Linux系统(吐血)。要解决问题就要找到根本原因搜罗大量国内外文章之后,我们发现了端倪,首先有一篇比较全面的文章OpenJFX/Font+Setup 可以指导我们排查问题,过程就不描述了,结论就是:JavaFX 默认字体名称(CSS -fx-font-family:)为 "System Regular" 字体族 "System",通过Linux系统命令 “ $ fc-match sans.regular ” 可输出其映射的实际字体文件 NotoSansCJK-Regular.ttc: "Noto Sans CJK SC" "Regular",其中的SC表示简体中文( Simplified Chinese ),如此说来,更本不是 Linux 系统缺简体中文字体(哪个Linux系统没有中文桌面呢,那不是也正确显示中文了吗),其实是 JavaFX 自身的问题。网上有一篇文章跟踪了JavaFx的字体加载过程,解释了这个问题的原因,很遗憾我们丢失了链接(这里应该链接到那一篇非常不错的文章);根本原因就是 JavaFx 在 Windows 、MacOS 和 Linux 分别采用了不同的默认字体加载机制,而 Linux 中的加载机制,恰好没有将 “System”默认为支持中文的字体。问题的根源已经找到,接下来想办法解决。解决JavaFx在Linux中文显示问题我必须要吐槽,解决这个问题的过程,真的非常痛苦。1.通过 JavaFX 的样式表像前端那样配置多个字体名称来兼容多个平台(不可行)。