2013-04-19 121 views
2

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

这是我目前所知:

  • 这似乎是某种关闭接一个错误的,因为显示的每个字符是期望的字符后面一个Unicode字符。
  • 两个数字之间的破折号字符在应用程序中以字符串文字形式硬编码。
  • 它发生在各种版本的Oracle JVM上,包括1.6.x和1.7.x.
  • 它发生在几个选择的Windows 7机器上。

什么会导致此类问题?我还应该调查什么?谢谢。

+0

向我们展示一些代码 – 2013-04-19 23:54:01

+0

可惜我不能重现的问题我自己。代码非常简单。它基本上只是使用两个数字来设置标签的文本,这两个数字已经使用NumberFormat和一个字符串文字的短划线进行了格式化。 – 2013-04-19 23:57:57

+1

所以你没有访问代码?没有它就很难诊断。 – jazzbassrob 2013-04-20 00:00:04

回答

3

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

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

del %WINDIR%\System32\FNTCACHE.DAT 
0

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

附录:错误符号可能来自DateFormatSymbolsDecimalFormatSymbols,具体子类为Format。您可以通过几种方式验证事件调度线程的正确使用:

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

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

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

由于您无法重现该问题,因此您必须争取用户的帮助。理想情况下,你会想征求以下几点:

  • 主机名,平台,现场& JVM版本从System.getProperty()

  • 间歇性或一致性?

  • Screenshots

您可以通过在邮件中的某些细节填充使用Desktop#mail()制备使用户更容易,作为建议here

+0

我没有按照你的回答。你能详细解释一下吗?没有涉及DateFormat,只是一个NumberFormat。另外,如果字符串文字短划线与标签格式对象有什么关系,那么为什么还要在标签中逐个字符?我认为这可能与某个奇怪的系统配置或locale相关,不是吗? – 2013-04-20 02:32:27

+0

可能;更上面。 – trashgod 2013-04-20 13:12:53