JLabel文本乱码

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

这是我目前所知道的:

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

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

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

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

 del %WINDIR%\System32\FNTCACHE.DAT 

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

附录:错误符号可能来自Format的具体子类使用的DateFormatSymbolsDecimalFormatSymbols 。 您可以通过以下几种方式validation事件派发线程的正确使用:

  • 检查SwingUtilities.isEventDispatchThread()的结果。

  • 使用此处引用的文章中显示的方案之一。

  • 按照内存一致性属性中概述的原则检查源代码。

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

  • System.getProperty()主机名,平台,语言环境和JVM版本?

  • 间歇性还是一致性?

  • 截图 ?

您可以通过填写使用Desktop#mail()编写的消息中的某些详细信息来使用户更容易,如此处所示 。