【问题标题】:JLabel text is garbledJLabel 文字乱码
【发布时间】: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


【解决方案1】:

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

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

del %WINDIR%\System32\FNTCACHE.DAT

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

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

    • 间歇性还是持续性?

    • Screenshots?

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

    【讨论】:

    • 我没有听从你的回答。你能详细说明一下吗?不涉及 DateFormat,只是一个 NumberFormat。此外,如果这与格式对象有关,为什么字符串文字破折号会在标签中偏离一个?我认为这可能与奇怪的系统配置或语言环境有关,不是吗?
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2021-09-28
    • 2019-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多