TITLE:AWTEventを取得して入力イベントを監視

Posted by aterai at 2008-02-11

AWTEventを取得して入力イベントを監視

AWTEventを取得して、マウスやキーボードの入力イベントを監視します。

  • &jnlp;
  • &jar;
  • &zip;
DispatchEvent.png

サンプルコード

private static int DELAY = 10*1000; //10s
private final javax.swing.Timer timer = new javax.swing.Timer(DELAY, new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    setTestConnected(false);
    Toolkit.getDefaultToolkit().removeAWTEventListener(awtEvent);
    timer.stop();
  }
});
private final AWTEventListener awtEvent = new AWTEventListener() {
  public void eventDispatched(AWTEvent e) {
    if(timer!=null && timer.isRunning()) {
      //System.out.println("timer.restart()");
      timer.restart();
    }
  }
};
JButton button = new JButton(new AbstractAction("接続") {
  public void actionPerformed(ActionEvent e) {
    setTestConnected(true);
    Toolkit.getDefaultToolkit().addAWTEventListener(awtEvent,
        AWTEvent.KEY_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK);
    timer.setRepeats(false);
    timer.start();
  }
});

解説

上記のサンプルでは、一定時間(10秒)、マウスやキーボードからの入力が無い場合、接続(ダミー)を切るようになっています。


Application Inactivity « Java Tips Weblogを参考にして、Toolkit.getDefaultToolkit().getSystemEventQueue().push(eventQueue)は使用せず、以下のようにToolkit.getDefaultToolkit().addAWTEventListener(AWTEventListener) を使う方法に変更しました。

  • timerをtimer.setRepeats(false);でスタート(一回で終わる)
  • Toolkit.getDefaultToolkit().addAWTEventListenerで、AWTEventListenerを設定
  • AWTEventが発生した時に timer.restart();でタイマーをリセット
  • 時間がきたらToolkit.getDefaultToolkit().removeAWTEventListenerでAWTEventを取り除く

参考リンク

コメント