• 追加された行はこの色です。
  • 削除された行はこの色です。
TITLE:AWTEventを取得して入力イベントを監視
#navi(../)
RIGHT:Posted by [[aterai]] at 2008-02-11
*AWTEventを取得して入力イベントを監視 [#ad33b611]
AWTEventを取得して、マウスやキーボードの入力イベントを監視します。
#tags(AWTEvent, Toolkit, AWTEventListener)
RIGHT:Posted by &author(aterai); at 2008-02-11
* AWTEventを取得して入力イベントを監視 [#ad33b611]
`AWTEvent`を取得して、マウスやキーボードの入力イベントを監視します。

-&jnlp;
-&jar;
-&zip;
- &jnlp;
- &jar;
- &zip;

//#screenshot
#ref(http://lh6.ggpht.com/_9Z4BYR88imo/TQTLPUOE2MI/AAAAAAAAAXQ/5qrFGk7E5GM/s800/DispatchEvent.png)
#ref(https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTLPUOE2MI/AAAAAAAAAXQ/5qrFGk7E5GM/s800/DispatchEvent.png)

**サンプルコード [#fc4a223d]
#code{{
** サンプルコード [#fc4a223d]
#code(link){{
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) {
  @Override public void actionPerformed(ActionEvent e) {
    setTestConnected(false);
    Toolkit.getDefaultToolkit().removeAWTEventListener(awtEvent);
    timer.stop();
  }
});
private final AWTEventListener awtEvent = new AWTEventListener() {
  public void eventDispatched(AWTEvent e) {
  @Override 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) {
JButton button = new JButton(new AbstractAction("Connect") {
  @Override public void actionPerformed(ActionEvent e) {
    setTestConnected(true);
    Toolkit.getDefaultToolkit().addAWTEventListener(awtEvent,
        AWTEvent.KEY_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK);
    timer.setRepeats(false);
    timer.start();
  }
});
}}

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

//以下のように、AWTEventListenerを使っても同様((イベントマスクは適当に追加修正してください。))のタイムアウト処理が可能です。
//以下のように、`AWTEventListener`を使っても同様((イベントマスクは適当に追加修正してください。))のタイムアウト処理が可能です。
//#code{{
//Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
//  public void eventDispatched(AWTEvent e) {
//  @Override public void eventDispatched(AWTEvent e) {
//    System.out.println(e);
//  }
//}, AWTEvent.KEY_EVENT_MASK + AWTEvent.MOUSE_EVENT_MASK);
//}}

----
[http://tips4java.wordpress.com/2008/10/24/application-inactivity/ 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を取り除く
[http://tips4java.wordpress.com/2008/10/24/application-inactivity/ Application Inactivity « Java Tips Weblog]を参考にして、`Toolkit.getDefaultToolkit().getSystemEventQueue().push(eventQueue)`は使用せず、以下のように`Toolkit.getDefaultToolkit().addAWTEventListener(AWTEventListener)`を使う方法に変更しました。

**参考リンク [#db411231]
-[http://tips4java.wordpress.com/2008/10/24/application-inactivity/ Application Inactivity « Java Tips Weblog]
- `timer`を`timer.setRepeats(false);`でスタート(一回で終了する)
- `Toolkit.getDefaultToolkit().addAWTEventListener`で、`AWTEventListener`を設定
- `AWTEvent`が発生した時に`timer.restart();`でタイマーをリセット
- 時間がきたら`Toolkit.getDefaultToolkit().removeAWTEventListener`で`AWTEvent`を取り除く

**コメント [#k0faafe0]
** 参考リンク [#db411231]
- [http://tips4java.wordpress.com/2008/10/24/application-inactivity/ Application Inactivity « Java Tips Weblog]

** コメント [#k0faafe0]
#comment