2013-04-19 120 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