2009-01-16 57 views
2

我有一個在Linux下運行的Swing應用程序,它有顯示重音字符的問題。爲什麼鍵入unicode時,Linux下不顯示KeyTyped事件?

縱觀該應用程序,我將問題追蹤到鍵盤。我添加了一個新的EventQueueManager來攔截所有收到的事件。

我在兩個系統上輸入了「[dead acute] [a]」序列。

在窗口,我得到:

D 090116 100330.015000 AWT-EventQueue-1 [HotKeyManager.java : 133 - handleAWTEvent] java.awt.event.KeyEvent[KEY_PRESSED,keyCode=129,keyText=Dead Acute,keyChar='´',keyLocation=KEY_LOCATION_STANDARD] on frame0 
D 090116 100330.109000 AWT-EventQueue-1 [HotKeyManager.java : 133 - handleAWTEvent] java.awt.event.KeyEvent[KEY_PRESSED,keyCode=65,keyText=A,keyChar='a',keyLocation=KEY_LOCATION_STANDARD] on frame0 
D 090116 100330.109000 AWT-EventQueue-1 [HotKeyManager.java : 133 - handleAWTEvent] java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='á',keyLocation=KEY_LOCATION_UNKNOWN] on frame0 
D 090116 100330.125000 AWT-EventQueue-1 [HotKeyManager.java : 133 - handleAWTEvent] java.awt.event.KeyEvent[KEY_RELEASED,keyCode=129,keyText=Dead Acute,keyChar='´',keyLocation=KEY_LOCATION_STANDARD] on frame0 
D 090116 100330.203000 AWT-EventQueue-1 [HotKeyManager.java : 133 - handleAWTEvent] java.awt.event.KeyEvent[KEY_RELEASED,keyCode=65,keyText=A,keyChar='a',keyLocation=KEY_LOCATION_STANDARD] on frame0 

在Linux下,我得到:

D 090116 151026.380000 AWT-EventQueue-0 [HotKeyManager.java : 132 - handleAWTEvent] java.awt.event.KeyEvent[KEY_RELEASED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='?',keyLocation=KEY_LOCATION_UNKNOWN] on frame0 

如此看來,沒有在鍵盤的處理方式有些差異。也許某種類型的字符編碼問題?

回答

3

我可能會離開基地,但我認爲通過按下並釋放死鎖,然後按下並釋放目標鍵 - 窗口事件表明您正在使用死鍵,如shift鍵,按並持有,擊中目標,釋放死鑰匙。

否則,我相信你在JVM或鍵盤驅動程序中發現了一個錯誤。我們假設死鎖鍵在原生應用程序中起作用以產生重音字符,這將指向Java。什麼JVM版本?升級到新的JVM選項?你有沒有在這個網站上搜索太陽網站上發現的錯誤?

我不認爲這可能是任何類型的編碼問題 - 關鍵事件是不同的抽象層次,本身不需要編碼。他們生成虛擬鍵碼和/或可鍵入的Unicode字符(直接)。

+0

它看起來像Java和Linux下的硬件之間的錯誤,或者說是一種混淆,基於使用的語言環境。 – 2009-01-26 16:32:05

相關問題