键入unicode时为什么在Linux下不显示KeyTyped事件?

时间:2009-01-16 15:09:55

标签: java windows linux unicode

我有一个在Linux下运行的Swing应用程序,它有显示重音字符的问题。

查看应用程序,我将问题跟踪到键盘。我添加了一个新的EventQueueManager来拦截收到的所有事件。

我在两个系统上输入了“[dead acute] [a]”序列。

在Windows中我得到:

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

所以看起来键盘的处理方式有所不同。也许某种类型的字符编码问题?

1 个答案:

答案 0 :(得分:3)

我可能会偏离基地,但我认为死键是通过按下并释放死键,然后按下并释放目标键 - 窗口事件表明你正在使用死键,如移位键,按和按住,击中目标,释放死锁。

否则,我相信您在JVM或键盘驱动程序中发现了一个错误。人们假设死键序列在本机应用程序中起作用以产生重音字符,这将指向Java。什么JVM版本?升级到新的JVM是一个选项吗?您是否在sun网站上搜索过此处发布的错误?

我不相信这可能是任何类型的编码问题 - 关键事件本身就是一个不需要编码的不同抽象级别。它们(直接)生成虚拟键代码和/或可键入的Unicode字符。