У меня есть приложение Java со многими текстовыми полями, где я могу ввести, например, é
, нажав `
, а затем e
. Это поведение, известное из многих приложений.Как узнать, кто разрушает событие KEY_TYPED?
Теперь после конкретной операции пользователя (начиная с конкретного модуля приложения) все текстовые поля в приложении не смогут ввести é
.
Вот что я сделал:
Происходит ли это на Windows, или Linux? Только Windows.
Это происходит с конкретной JVM? AFAIS нет - используя 6-32/64 и 7-32/64 Я могу воспроизвести проблему.
Это происходит с конкретной базой кода приложения? Да, но может быть полезной информацией, что я не могу воспроизвести проблему из Eclipse. Проблема только в упакованном приложении.
Какие события происходят?
Перед запуском модуля:
*!*!* dispatching: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=129,keyText=Akut (Dead),keyChar='┤',keyLocation=KEY_LOCATION_STANDARD,rawCode=221,primaryLevelUnicode=180,scancode=13,extendedKeyCode=0x81] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_RELEASED,keyCode=129,keyText=Akut (Dead),keyChar='┤',keyLocation=KEY_LOCATION_STANDARD,rawCode=221,primaryLevelUnicode=180,scancode=13,extendedKeyCode=0x81] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=69,keyText=E,keyChar='e',keyLocation=KEY_LOCATION_STANDARD,rawCode=69,primaryLevelUnicode=101,scancode=18,extendedKeyCode=0x45] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unbekannt keyCode: 0x0,keyChar='Ú',keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_RELEASED,keyCode=69,keyText=E,keyChar='e',keyLocation=KEY_LOCATION_STANDARD,rawCode=69,primaryLevelUnicode=101,scancode=18,extendedKeyCode=0x45] on mainFrame
После запуска модуля:
*!*!* dispatching: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=129,keyText=Akut (Dead),keyChar='┤',keyLocation=KEY_LOCATION_STANDARD,rawCode=221,primaryLevelUnicode=180,scancode=13,extendedKeyCode=0x81] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_RELEASED,keyCode=129,keyText=Akut (Dead),keyChar='┤',keyLocation=KEY_LOCATION_STANDARD,rawCode=221,primaryLevelUnicode=180,scancode=13,extendedKeyCode=0x81] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_PRESSED,keyCode=69,keyText=E,keyChar='e',keyLocation=KEY_LOCATION_STANDARD,rawCode=69,primaryLevelUnicode=101,scancode=18,extendedKeyCode=0x45] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unbekannt keyCode: 0x0,keyChar='e',keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0,extendedKeyCode=0x0] on mainFrame
*!*!* dispatching: java.awt.event.KeyEvent[KEY_RELEASED,keyCode=69,keyText=E,keyChar='e',keyLocation=KEY_LOCATION_STANDARD,rawCode=69,primaryLevelUnicode=101,scancode=18,extendedKeyCode=0x45] on mainFrame
Как вы видите на выходе, кодирование очевидно, точка, в которой у меня мало знаний. Поэтому кодирование может быть проблемой, хотя я не понимаю, где его установить, и почему проблема возникла только после определенного момента времени. Поэтому лично я не думаю, что причиной является кодировка. Я попытался использовать -Dfile.encoding=Cp1252
-Dfile.encoding=ISO-8859-15
, но проблема все еще существует на Windows вне Eclipse и не встречается в Linux или внутри Eclipse.
Так что же я ожидаю? Мне нужен кто-то, кто может сказать, что я должен искать, чтобы найти причину этой странной проблемы. Любая документация, которую я нашел о KeyEvents, слишком много для новичков, мне нужна документация для точки, где я сейчас. Кто создает события KEY_TYPED
? Или кто несет ответственность за манипуляции с неправильным событием?
Спасибо заранее!