JLabel文本乱码

时间:2013-04-19 23:51:35

标签: java swing character-encoding jlabel off-by-one

我看到一个涉及JLabel的奇怪问题,用于显示一系列数字。标签的文字通常类似于 0.0 - 100.0 (例如)。问题是,对于少数几个用户,文本显示为乱码。在此示例中,文本将显示为 / - /,0 // - /

这是我目前所知道的:

  • 这似乎是某种一对一的错误,因为显示的每个字符都是预期字符后面的一个Unicode字符。
  • 两个数字之间的短划线字符在应用程序中被硬编码为字符串文字。
  • 它发生在各种版本的Oracle JVM上,包括1.6.x和1.7.x。
  • 这种情况发生在一些精选的Windows 7计算机上。

什么可能导致这类问题?我还应该调查什么?感谢。

2 个答案:

答案 0 :(得分:4)

当您将JLabel的字体设置为Windows字体缓存中已损坏的字体时会发生这种情况。

要重建缓存:以管理员身份删除此文件并重新启动PC:

del %WINDIR%\System32\FNTCACHE.DAT

答案 1 :(得分:0)

它看起来像一个错误的DateFormat,其实例“通常不同步”。如果它是间歇性的,而不是选择性的,请验证invokeLater()的正确使用,以及“为每个线程创建单独的格式实例”。另请参阅Format

附录:错误符号可能来自DateFormatSymbols的具体子类使用的DecimalFormatSymbolsFormat。您可以通过多种方式验证事件派发线程的正确使用:

  • 检查SwingUtilities.isEventDispatchThread()

  • 的结果
  • 采用引用文章here中显示的其中一种方案。

  • 按照Memory Consistency Properties中汇总的原则检查源代码。

由于无法重现问题,因此您必须寻求用户的帮助。理想情况下,您需要征求以下内容:

  • 主机名,平台,区域设置&来自System.getProperty()的JVM版本?

  • 间歇性或一致性?

  • Screenshots

根据建议here,您可以在使用Desktop#mail()准备的邮件中填写一些详细信息,从而使用户更轻松。