Вводный бросок выдает исключение, если попытка броска перестала работать. "Поскольку" состав исполнителей возвращает пустой указатель, если попытка броска перестала работать.
Итак, проблема, с которой я столкнулся кажется ошибкой, которая возникает только в Linux
Да, это проблема Linux.
В Windows, когда клавиша удерживается, вы получаете несколько событий KeyPressed, но только одно событие KeyReleased.
Этот вопрос задают часто, и я никогда не видел хорошее решение.
Но я думаю, что в основе решения лежит использование таймера. При нажатии клавиши запускается таймер. Когда вы нажмете еще одну клавишу, вы перезапустите таймер. Таким образом, пока интервал таймера больше, чем частота повторения клавиатуры, таймер будет постоянно сбрасываться при удерживании клавиши. Когда keyPresses перестанут генерироваться, таймер сработает, поэтому вы предполагаете, что клавиша была отпущена. Это означает, что у вас будет задержка в обработке keyReleased.
Вот баг от Солнца (включает в себя примеры обходных путей): http://bugs.sun.com/view_bug.do?bug_id=4153069
Этот вопрос дублируется здесь .
Вот хак , реализованный как AWTEventListener, который можно установить при запуске приложения.