以下是有关我的问题的更多信息(我进行了一些调查):
Linux(Kubuntu 14.04): 当我使用JAVA 6启动我的程序时,中文字符没有显示(仅显示空框)。(通过getFont()询问标签字体返回:DejaVu Sans)。 当我使用JAVA 7启动我的程序时,中文字符正确显示!(通过getFont()询问标签字体返回:DejaVu Sans)。
Windows(8.1): 当我使用JAVA 6启动我的程序时,中文字符正确显示!(通过getFont()询问标签字体返回:SansSerif)。 当我使用JAVA 7启动我的程序时,中文字符正确显示!(通过getFont()询问标签字体返回:SansSerif)。 $JAVA_HOME/lib/fonts(似乎作为回退字体使用),两个Java版本(6+7)都包含相同的字体。(在两个系统上) 字体文件大小相同(Java6 + Java7),fontconfig.properties.src也完全相同。
当我直接询问标签(通过getFont())时,在Windows(8.1)上返回“SansSerif”,在我的Kubuntu(14.04)上返回“DejaVu Sans”。(请参阅屏幕截图)
在Linux上使用JAVA 6启动:
![enter image description here](https://istack.dev59.com/dO6GX.webp)
![enter image description here](https://istack.dev59.com/BGcXw.webp)
编辑: DejaVu Sans也是如此。 看起来DejaVu Sans没有中文字符!(但是它们被显示!)
编辑2: 我尝试了Andrew发布的代码(请参见:How to determine if 2 fonts have equivalent glyphs?),但使用中文示例文本时,结果如下:
编辑3:
按照要求,以下是我测试过的字符串:
String s = "\u6253\u5370\u8FC7\u671F\u8BC1\u4E66\u8BB0\u5F55"; //means: 打印过期证书记录
JOptionPane.showMessageDialog(null, s);
问题是:
系统上实际使用的字体是哪种,如何找到?
谢谢。
Font.canDisplayUpTo(String)
。 - Andrew ThompsonFont.canDisplay...
我无法找出使用的是哪种字体。 - BenJTextField
显示了这些字符。检查文本字段中使用的字体显示为“Dialog plain”。当我询问哪些字体可以提供相同的字符形状时,软件显示了一个长列表(与英语句子通常只有2或3个不同)。大多数列出的字体都是逻辑字体,剩下的3个是“MingLiU”,“MingLiU_HKCS”或“PMingLiU”。 - Andrew Thompson