2013-04-19 2 views
2

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

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

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

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

+0

показать нам код –

+0

К сожалению, я не могу воспроизвести этот вопрос сам. Код довольно прост. В основном это просто установка текста метки с использованием двух чисел, которые были отформатированы с помощью NumberFormat и тире, который является строковым литералом. –

+1

Итак, у вас нет доступа к коду? Без него довольно сложно диагностировать. – jazzbassrob

ответ

3

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

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

del %WINDIR%\System32\FNTCACHE.DAT 
0

Похоже, что ошибочный DateFormat, экземпляры которого «обычно не синхронизированы». Если это прерывистый, а не выборочный, проверьте правильность использования invokeLater() и «создайте экземпляры отдельного формата для каждого потока». См. Также Format.

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

  • Проверьте результат SwingUtilities.isEventDispatchThread().

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

  • Осмотрите исходный код, следуя принципам, приведенным в Memory Consistency Properties.

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

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

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

  • Screenshots?

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

+0

Я не отвечаю за ваш ответ. Можете ли вы подробнее рассказать? В нем нет функции DateFormat, а всего лишь NumberFormat. Кроме того, почему строка литерального тире будет включена в метку, если это имеет какое-либо отношение к объекту формата? Я думаю, что это, вероятно, что-то связанное со странной конфигурацией системы или языком, нет? –

+0

Может быть; выше. – trashgod

Смежные вопросы