Захват глобальных нажатий клавиш с помощью java.awt.Toolkit - PullRequest
1 голос
/ 27 марта 2012

Я нашел метод addAWTKeyListener в классе Toolkit, но я не могу заставить его работать должным образом, независимо от того, находится ли окно в фокусе.Мой код выглядит следующим образом:

import java.awt.AWTEvent;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyEvent;


public class KeyTest {

    public static void main(String[] args){
    Thread t = new Thread(){
        @Override
        public void run() {
        System.out.println("STARTING");
        Toolkit kit = Toolkit.getDefaultToolkit();
        kit.addAWTEventListener(new AWTEventListener(){

            @Override
            public void eventDispatched(AWTEvent event) {
            System.out.println("EVENT");
            if(event instanceof KeyEvent){
                KeyEvent kEvent = (KeyEvent) event;
                System.out.println(kEvent.getKeyCode());
            }
            }

        }, AWTEvent.KEY_EVENT_MASK);
        while(true);
        }
    };
    t.start();
    }

}

Что-то я не так делаю?Я дошел до того, что НАЧИНАЕТ печатать и ошибок нет.Даже не называется просто.

Ответы [ 2 ]

1 голос
/ 27 марта 2012

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

Вы пытаетесь запечатлеть нажатие клавиши?используя программу на Java, но без создания окна?Часть безопасности Java, и в этом я могу ошибаться, заключается в том, что она может прослушивать только события в окнах Java, созданных этой конкретной программой Java.

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

Хотел бы я дать вам более конкретный ответ, но надеюсь, что это помогло.

1 голос
/ 27 марта 2012

Просто предположение, но у вас в вашем образце нет окон AWT, поэтому я предполагаю, что это событие никогда не запускается.

Когда вы говорите "есть окно или нетимеет фокус "у вашего реального приложения есть окна, которые вы вырубили, или вы говорите об окне консоли Java или аналогичном?

...