Текст 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()
, как предлагается здесь.