как принимать сочетания клавиш, когда jframe не в фокусе?

Я сделал приложение с использованием java, которое делает и сохраняет скриншоты в указанной папке. Я установил сочетание клавиш Ctrl + K, чтобы сделать и сохранить снимок экрана, и мне удалось свернуть мое приложение в системный трей при нажатии кнопки свертывания jframe, но проблема в том, что назначенное сочетание клавиш не работает, как только jframe либо свернуто или переведено в фоновый режим каким-либо другим приложением. Можно ли заставить приложение работать, даже если JFrame не находится в фокусе? Пожалуйста помоги! Спасибо! (Я делаю приложение только для Windows)


person user3626393    schedule 30.05.2014    source источник
comment
Windows не будет отправлять Ctrl-K в свернутые окна. Так что ничего из того, что вы можете сделать на Java, не даст вам того, что вы хотите.   -  person Dawood ibn Kareem    schedule 30.05.2014
comment
О единственном решении, которое у вас есть, было бы использовать библиотеку JNI/JNA, которая могла бы отслеживать глобальные нажатия клавиш, сгенерированные на уровне ОС.   -  person MadProgrammer    schedule 30.05.2014
comment
@MadProgrammer, не могли бы вы дать мне ссылку на примеры того, как использовать упомянутую вами библиотеку JNI/JNA. Пожалуйста.   -  person user3626393    schedule 30.05.2014
comment
Я хочу знать, почему мой вопрос был задан -1??? Я не нашел такого предыдущего вопроса в stackoverflow.   -  person user3626393    schedule 30.05.2014
comment
Вы, вероятно, никогда не узнаете, кто проголосовал за него и почему. Вы мало что можете с этим поделать, но я не понимаю, почему это имеет значение. Вы получили ответ, который хотели.   -  person Dawood ibn Kareem    schedule 30.05.2014
comment
да, но все же, сэр, должна быть веская причина, чтобы понизить вопрос, но я думаю, что некоторым людям нравится понизить голосование. в любом случае всем спасибо! :)   -  person user3626393    schedule 30.05.2014


Ответы (1)


Для чего-то подобного я бы использовал стороннюю библиотеку, например JNativeHook (я часто ее использую). Вы можете использовать глобальный прослушиватель nativehook

Вот несколько примеров его использования примеры

person Tomas Bisciak    schedule 30.05.2014
comment
Спасибо за ваш ответ, я думаю, это сработает, но я хочу кое-что спросить, показанный пример включает использование одной клавиши в качестве ярлыка, в то время как я хочу Ctrl + K, можно ли это реализовать с помощью этой библиотеки? - person user3626393; 30.05.2014
comment
конечно, это почти так же, как вы привыкли делать это в свинге. - person Tomas Bisciak; 30.05.2014
comment
Большое спасибо!! :) ты здорово помог :) - person user3626393; 30.05.2014