【发布时间】:2013-04-19 23:51:34
【问题描述】:
我看到一个奇怪的问题,涉及用于显示一系列数字的JLabel。标签的文本通常类似于 0.0 - 100.0(例如)。问题在于,对于少数几个用户,文本出现乱码。在此示例中,文本将显示为 /-/,0//-/。
这是我目前所知道的:
- 这似乎是某种不合一的错误,因为显示的每个字符都是预期字符后面的一个 Unicode 字符。
- 两个数字之间的短划线字符在应用程序中被硬编码为字符串文字。
- 各种版本的 Oracle JVM 上都会出现这种情况,包括 1.6.x 和 1.7.x。
- 这发生在一些选定的 Windows 7 机器上。
什么可能导致此类问题?我还应该调查什么?谢谢。
【问题讨论】:
-
所以您无权访问代码?没有它就很难诊断。
-
我们的 java 编辑器 josm 也有类似的问题(参见 josm.openstreetmap.de/ticket/8488)。我有两个问题要问您:您的 JLabel 是否使用自定义字体,以及用户的语言环境。
-
@DirkStöcker,您的问题似乎完全相同。我的标签确实有明确设置的字体(Arial plain 12pt.)。我可以在星期一确认语言环境,但它们可能是 en_US 和 en_CA。我倾向于这是一个字体问题,因为我们没有看到应用程序中大多数其他标签的问题。
-
另外两件事可以解释这个错误: * 用户可能已经安装了 gdipp(替代 Windows 字体渲染器),它受到a similar bug 的影响。 * Windows 字体缓存 (%WINDIR%\System32\FNTCACHE.DAT) 中的损坏有时会导致类似的行为。用户应尝试删除此文件并重新启动他们的 PC。
-
@vip,清除字体缓存解决了这个问题!请添加答案,以便我接受。
标签: java swing character-encoding jlabel off-by-one