2013-02-19 3 views
1

У меня есть следующий код:SWT KeyUp слушатель события пропускает ключи

display.addFilter(SWT.KeyUp, new Listener() 
{ 
    public void handleEvent(Event e) 
    { 
     System.out.println("Released " + e.character); 
    } 
}; 

Когда я нажимаю вниз ключи «а», «с», «D» и «F» в то же время, Событие KeyDown работает, как ожидалось. Тем не менее, когда я выпускаю все ключи в то же время я ожидаю, что выход будет что-то вроде:

Вышло выход s выхода d выходом х

Но это не так. Что печатается, как правило, только один символ, например:

выхода д

Почему пропуск на других двух или трех событий?

ответ

2

Это bug.

Ошибка 50020 - KeyReleased не работает правильно.
KeyReleased, кажется, срабатывает неправильно или вообще не работает в следующем случае: Несколько клавиш нажаты, последовательно и удерживаются. Один за другим выходят ключи . Событие keyReleased срабатывает, но event.character всегда является последним нажатым клавишей . Если последний нажатый клавиша высвобождается, все остальные клавиши не запускают выпущенное событие при их освобождении.

Исправлена ​​ошибка, вероятно, никогда не исправляются (Комментарий # 1 в записи BugTracker):

Комментарий # 1
Это очень старая ошибка, что мы, вероятно, не исправит. Задача состоит в том, что в окне недостаточно информации для вычисления ключа , который был нажат в WM_KEYUP.