Почему событие KeyTyped не отображается под Linux при наборе Unicode? - PullRequest
2 голосов
/ 16 января 2009

У меня есть приложение Swing, работающее под Linux, в котором возникают проблемы с отображением акцентированных символов.

Заглядывая в приложение, я отследил проблему до клавиатуры. Я добавил новый EventQueueManager для перехвата всех полученных событий.

Я набрал последовательность «[dead sharp] [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

Так что, похоже, есть разница в способах работы с клавиатурой. Может быть, какая-то проблема кодировки символов?

1 Ответ

3 голосов
/ 24 января 2009

Я мог бы быть далеко от базы, но я думал, что мертвые клавиши работают, нажимая и отпуская мертвую клавишу, затем нажимая и отпуская целевую клавишу - события окон показывают, что вы используете мертвую клавишу, например, клавишу Shift, нажмите удерживать, поразить цель, отпустить мертвый ключ.

В противном случае, я полагаю, вы обнаружили ошибку либо в JVM, либо в драйвере клавиатуры. Предполагается, что последовательность мертвых клавиш работает в нативных приложениях для создания акцентированного символа, который указывает пальцем на Java. Какая версия JVM? Является ли обновление до новой JVM вариантом? Вы искали на сайте Sun сообщения об ошибках на этом сайте?

Я не верю, что это может быть какой-либо проблемой кодирования - ключевые события представляют собой другой уровень абстракции, который не требует кодирования как такового. Они генерируют виртуальные коды клавиш и / или набираемые символы Юникода (напрямую).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...