구성 요소 수준이 아닌 응용 프로그램 수준에서 키 이벤트를 통보받을 수 있습니까? 응용 프로그램 수준에서 의미하는 것은 스윙 구성 요소가 키 이벤트를받지 않지만 특수 클래스가 시스템 전체의 키 이벤트를 수신하도록하는 것입니다.Java의 응용 프로그램 수준에서 주요 이벤트
예를 들어 GUI가없는 앱에서나 키 이벤트의 글로벌 처리가 필요할 때 사용할 수 있습니다.
구성 요소 수준이 아닌 응용 프로그램 수준에서 키 이벤트를 통보받을 수 있습니까? 응용 프로그램 수준에서 의미하는 것은 스윙 구성 요소가 키 이벤트를받지 않지만 특수 클래스가 시스템 전체의 키 이벤트를 수신하도록하는 것입니다.Java의 응용 프로그램 수준에서 주요 이벤트
예를 들어 GUI가없는 앱에서나 키 이벤트의 글로벌 처리가 필요할 때 사용할 수 있습니다.
네이티브 자바에서 가능한지 확실하지 않은 경우 : Windows에서 키 이벤트를 시스템 (글로벌) 수준으로 연결하기 위해 DLL을 만들어야합니다. Unix 또는 MacOS에서는 다른 메커니즘이라고 가정합니다. 이 작업을 수행하려면 저급 시스템 API에 인터페이스해야합니다.
이 과정이 어렵습니까? Win32 프로그래밍에 대한 경험이 없습니다. 무서워요. –
신호는 보편적 인 개념이 아니지만 모든 곳에서 사용되지 않으면 종료를위한 ctrl + c와 같은 특정 신호가 널리 보급되어 있습니다. 이 특정 신호는 셧다운 훅을 사용하여들을 수 있습니다. Runtime.addShutdownHook (Thread)를 호출하면 (자), 이유를 불문하고 VM가 닫혀지고있는 것을 알 수있어 그 이벤트로 무언가를 할 수 있습니다.
java.awt.Toolkit의 addAWTEventListener() 메소드를 사용하여 응용 프로그램에 전역 이벤트 수신기를 추가 할 수 있습니다. 응용 프로그램이 포커스가있을 때
은 물론이 경우에만 작동합니다.
그래서 키 이벤트를 다음과 같이 사용할 수 있습니다public class MyGlobalKeyListener implements AWTEventListener {
public void eventDispatched(AWTEvent event) {
// do something here
}
}
// Then on startup register.
AWTEventListener myGlobalKeyListener = new MyGlobalKeyListener();
Toolkey.getDefaultToolkit().addAWTEventListener(myGlobalKeyListener, AWTEvent.KEY_EVENT_MASK);
흠 ... 처음부터 focs를 얻을 gui가 없으면 어떻게됩니까? –
gui가없는 경우 AWT로부터 KeyEvent를 가질 수 없습니다. GUI가없는 키보드의 유일한 사용자 입력은 콘솔에 입력 된 문자를 수신하는 System.in 스트림에서 직접옵니다. 응용 프로그램에 초점이 맞지 않아도 이벤트를 캡처해야하는 경우 PhiLho가 제안한대로 운영 체제 수준의 후크에 액세스하려면 JNI를 사용해야 할 것입니다. – Aaron
당신은 당신이 듣고 싶은 이벤트에 대한보다 구체적인해야합니다. 내가 생각할 수있는 보편적 인 유일한 것에 관해서는 종료입니다. –