コンポーネント レベルではなく、アプリケーション レベルで重要なイベントの通知を受け取ることはできますか? アプリケーション レベルとは、swing コンポーネントにキー イベントを受信させるのではなく、特別なクラスにシステム全体のキー イベントをリッスンさせることです。
これは、たとえば GUI のないアプリで使用したり、主要なイベントのよりグローバルな処理が必要な場合に使用できます。
コンポーネント レベルではなく、アプリケーション レベルで重要なイベントの通知を受け取ることはできますか? アプリケーション レベルとは、swing コンポーネントにキー イベントを受信させるのではなく、特別なクラスにシステム全体のキー イベントをリッスンさせることです。
これは、たとえば GUI のないアプリで使用したり、主要なイベントのよりグローバルな処理が必要な場合に使用できます。
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);
ネイティブ Java で可能かどうかは不明です。Windows では、システム (グローバル) レベルで主要なイベントをフックする DLL を作成する必要があります。Unix または MacOS では別のメカニズムであると思われるため、low にインターフェイスする必要があります。これを行うためのレベル システム API。
シグナルは普遍的な概念ではありませんが、シャットダウンのための ctrl+c などの特定のシグナルは、どこでも使用されていない場合でも広く使用されています。その特定のシグナルは、シャットダウン フックを使用してリッスンできます。Runtime.addShutdownHook(Thread) を呼び出すと、なんらかの理由で VM がいつ閉じられるかを知ることができ、そのイベントで何かを行うことができます。