Текст JLabel искажен

Я вижу странную проблему, связанную с JLabel это используется для отображения диапазона чисел. Текст метки, как правило, примерно 0,0 - 100,0 (например). Проблема в том, что для избранных пользователей текст кажется искаженным. В этом примере текст будет отображаться как / - /, 0 // - /.

Вот что я знаю до сих пор:

  • Похоже, что это какая-то ошибочная ошибка, поскольку каждый отображаемый символ находится на один символ Юникода позади ожидаемого символа.
  • Тире между двумя числами жестко закодировано в приложении как строковый литерал.
  • Это происходит в различных версиях Oracle JVM, включая 1.6.x и 1.7.x.
  • Это происходит на некоторых компьютерах с Windows 7.

Что может вызвать проблемы такого типа? Что еще я должен исследовать? Благодарю.

2 ответа

Решение

Это происходит, когда вы устанавливаете шрифт вашего JLabel шрифт поврежден в кеше шрифтов Windows.

Чтобы восстановить кеш: от имени администратора удалите этот файл и перезагрузите компьютер:

del %WINDIR%\System32\FNTCACHE.DAT

Это выглядит странно DateFormat, экземпляры которых, как правило, не синхронизированы. Если оно прерывистое, а не избирательное, проверьте правильность использования invokeLater() и "создать отдельные экземпляры формата для каждого потока." Смотрите также Format,

Приложение: ошибочные символы могут возникать из DateFormatSymbols или же DecimalFormatSymbols используется конкретными подклассами Format, Вы можете проверить правильность использования потока отправки событий несколькими способами:

  • Изучите результат SwingUtilities.isEventDispatchThread(),

  • Используйте одну из схем, приведенных в цитируемых здесь статьях.

  • Проверьте исходный код, следуя принципам, приведенным в разделе " Свойства согласованности памяти".

Поскольку вы не можете воспроизвести проблему, вам придется заручиться помощью ваших пользователей. В идеале вы должны запросить следующее:

  • Имя хоста, платформа, локаль и версия JVM от System.getProperty()?

  • Прерывистый или последовательный?

  • Скриншоты?

Вы можете сделать это проще для пользователя, заполнив некоторые детали в сообщении, подготовленном с использованием Desktop#mail(), как предлагается здесь.

Другие вопросы по тегам