我在特定的Windows 7计算机上遇到JavaFX应用程序的问题,非英文文本显示不正确.字体设置为系统无处不在,据我所知应该是Windows 7上的Segoe UI(这确实是这台机器上的默认字体).系统的其他部分(非java)中的所有文本都正确显示,因此字体在那里并具有相应的字符集,这使我相信由于某种原因JavaFX无法加载它,而是使用不同的字体.
我的问题是 - 如何找出JavaFX 在特定系统上实际使用的字体?我试过Font.getDefault().getName()但它只是返回"系统",它什么也没告诉我.使用-Djavafx.verbose=true等等也没有产生任何有价值的东西.
在你问之前 - 是的,应用程序是Unicode,它可以在其他机器上运行,包括windows和linux,没有问题.我想尝试和诊断问题所以我不必诉诸重新安装机器(目前不是一个选项),或戏剧性的东西.
编辑:似乎Segoe UI实际上并不包含那个特定的字符集.尽管如此,系统的其余部分还是可以的.因此,更准确的问题是 - 为什么JavaFX无法实现这一点并使用回退?我如何调试/诊断出现了什么问题?
在Windows 7系统上有一个Segoe UI作为默认字体,但默认情况下版本为5.01.因此您无法使用此字体显示希伯来语字符.Windows将在运行时用另一种能够显示它们的字体替换丢失的希伯来字体字符.
因此,如果您尚未将Font Segoe UI更新为min.版本5.13,然后它将永远被替换.但JavaFX将无法做到这一点,因为它获得了系统默认字体(在Font Family System中).获得字体后,它不会替换字符.
如果您转到系统首选项,那么您应该看到详细视图中的字体,Segoe UI 不支持希伯来字符.
如果你去系统的喜好和那里字体,你应该看到的细节来看,这濑越界面是支持希伯来文字符.
即使查看类别,如果它没有设置为Text,那么它可能不是默认字体.
设置另一种能够显示整个应用程序的希伯来语的字体.这在这里描述:https://stackoverflow.com/a/18409438/4170073
我已经展示了另一个,你可以在你的项目中放置所需的字体并从那里调用它:https://stackoverflow.com/a/31291372/4170073
为确保您的语言正确显示,您必须捆绑并使用自己的字体.否则,您永远不会确定在其他系统上您的文本将正确显示.这不是解决方法,这是(JavaFX,Swing)应用程序将这样做的方式.