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