如何使用Java查找机器上是否正确安装了某种字体

如何使用Java查找机器上是否正确安装了某种字体,java,fonts,detect,Java,Fonts,Detect,我有一台运行Win Vista的笔记本电脑,当我第一次购买它时,某些中文字体不会显示,我只能看到矩形,但我玩了一段时间控制设置,更改了一些属性,现在它可以正确显示中文字体,但我不记得我做了什么 现在,我的一些程序同时显示英文和中文,类似这样:“输入|输入" (中文在这里也意味着输入),但如果用户的机器上没有正确安装中文字体,他会看到类似这样的内容:“输入|[…]”,我的问题是:在Java中如何检测这些字符在某台机器上是否正确显示,如果没有,只显示“输入”,如果是,则显示“输入”|输入“ Fran

我有一台运行Win Vista的笔记本电脑,当我第一次购买它时,某些中文字体不会显示,我只能看到矩形,但我玩了一段时间控制设置,更改了一些属性,现在它可以正确显示中文字体,但我不记得我做了什么

现在,我的一些程序同时显示英文和中文,类似这样:“输入|输入" (中文在这里也意味着输入),但如果用户的机器上没有正确安装中文字体,他会看到类似这样的内容:“输入|[…]”,我的问题是:在Java中如何检测这些字符在某台机器上是否正确显示,如果没有,只显示“输入”,如果是,则显示“输入”|输入“


Frank

java.awt.GraphicsEnvironment.getAvailableFontFamilyNames()
可以为您提供当前系统上安装的可用字体列表。您还可以使用
java.awt.GraphicsEnvironment.getAllFonts()
获取
java.awt.Font
对象

然后,您可以使用
java.awt.Font.canDisplay(int)
检查该字体中是否可以显示Unicode字符(其中
int
是多字节字符的整数表示形式)。

惰性版本:

Arrays.asList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()).contains(FONT_NAME)

我们可以假设您正在谈论的是一个Swing应用程序吗?从您的消息中不清楚您正在谈论哪种Java应用程序。在NetBeans中,您可以选择哪种字体用于诸如JLabels之类的内容。我想确认,仅仅因为NetBeans中可以使用字体并不一定意味着它将被安装用户机器上的d是否正确?@advocate这个答案太老了,而且我已经很久没有使用Java了,所以可能是这样。4年是Java API成熟的很长时间。不管怎样,OP问题的关键是如何检测某些字符是否能在机器上显示,不管系统中如何安装/处理字体.Fonts可以在运行时以编程方式安装,因为所有这些代码都关心。事实上,这已经有一段时间了。我推测,之所以有一个API来查询系统安装的前端,是因为1)java没有在所有操作系统上都安装字体,2)并非所有操作系统都支持所有字体系统。此代码本质上允许您验证用户计算机上是否存在要使用的字体。如果不存在,您可以通过这种方式进行更改。@provoter通常Java不安装字体(实际上,Oracle JRE有多个捆绑字体)。您的应用程序可以绑定其他字体并使用它们。有关详细信息,请参阅和。答案中的代码允许您:1)检查系统上是否有特定字体,2)检查字体是否可以显示特定字符。