でアプリケーションを作成していますSwing
が、問題が発生しました。focusLost()
とイベントを処理したいのですがfocusGained()
、コードにバグがあると思います。
私は次のテストコードを持っています:
addWindowFocusListener(new WindowFocusListener() {
@Override
public void windowLostFocus(WindowEvent e) {
System.out.println("Lost!");
System.out.println(e.toString());
}
@Override
public void windowGainedFocus(WindowEvent e) {
System.out.println("Gained!");
System.out.println(e.toString());
}
});
そして、ウィンドウをアクティブにすると、アプリは一度に2つのイベントを処理するようです:
得た! frame0のjava.awt.event.WindowEvent[WINDOW_GAINED_FOCUS、opposite = null、oldState = 0、newState = 0] 失った! frame0のjava.awt.event.WindowEvent[WINDOW_LOST_FOCUS、opposite = null、oldState = 0、newState = 0]
そして、ウィンドウを非アクティブ化すると、プログラムは何も出力しません。
もっと面白いこともあります。JFrame
アプリに属する新しいアプリを開くと、この2番目を閉じても、イベントシステムは正しく機能しますWindow
。
なぜそれが起こっているのか分かりません。助けてください。
システム仕様:
- OS:Ubuntu 12.04 x86_64
- JVM:OpenJDK 7
m4tx @ m4tx-EP35-DS4:〜$ java -version ピックアップした_JAVA_OPTIONS:-Dawt.useSystemAAFontSettings = lcd Javaバージョン「1.7.0_03」 OpenJDKランタイム環境(IcedTea7 2.1.1pre)(7〜u3-2.1.1〜pre1-1ubuntu3) OpenJDK 64ビットサーバーVM(ビルド22.0-b10、混合モード)