Завершение программы при нажатии определенной клавиши на клавиатуре

Я хочу иметь возможность завершить свою программу при нажатии определенной клавиши (для этого примера мы скажем, когда нажата кнопка k). Я знаю, что это можно сделать с помощью JFrame а также KeyListener но хочу, чтобы мой слушатель работал в фоновом режиме. Моя программа в настоящее время изменяет текстовые документы, что означает, что активное окно не будет JFrame так что не будет записи нажатых клавиш. Также bufferd readers не являются опцией, как упомянуто ранее, запущенная Java-программа не является выбранным окном. Я потратил много часов на изучение различных способов, но все, что я нашел, это способы увидеть, нажата ли на них мышь, используя AWTEvents

В самом худшем случае я проверим, нажата ли вторая кнопка мыши, и завершу ли мой код, но в идеале я хотел бы просто завершить ее на нажатой клавише. Любая помощь будет отличной, прокомментируйте любые разъяснения.

3 ответа

Решение

... Я знаю, что это можно сделать с помощью JFrame и KeyListener

Нет, вы почти никогда не добавите KeyListener в JFrame или вообще не будете использовать KeyListener в Swing GUI, даже если вы хотите прослушивать нажатия клавиш в активном GUI.

но хочу, чтобы мой слушатель работал в фоновом режиме.

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

Самый простой способ сделать это - использовать другой язык, такой как язык сценариев AutoIt (если это Windows), а затем заставить мой AutoIt уведомлять мою Java-программу через стандартные входные и выходные сокеты.

Более сложным решением (для меня) является использование C или C++ для написания собственной клавиатуры, а затем связать это с Java через JNI или JNA. В любом случае, любое решение должно зависеть от платформы.

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

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

Надеюсь, поможет..

if(new Scanner(new InputStreamReader(System.in)).nextLine().length()>0)
    {
        System.exit(0);
    }

Вы можете использовать это, чтобы прекратить ядро ​​Java.

Я предлагаю использовать Auto Hot Key для управления Java-программой:

Run java.exe MyClass ,,,javaPID
^!k::Process, Close, %javaPID%

Это запустит программу при запуске и закроет ее при нажатии Ctrl-Alt-K

Другие вопросы по тегам