首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 偵測滑鼠鍵盤閒置 10 分鐘:需使用原生 Hook 或 AWT EventListener

     編輯:程式設計疑難解答

純 Java 的限制

標準 Java API 無法直接監聽系統級滑鼠/鍵盤事件(僅限於自身視窗內)。

方案一:JNativeHook(跨平台原生 Hook)

<dependency>
  <groupId>com.1stleg</groupId>
  <artifactId>JNativeHook</artifactId>
  <version>2.2.2</version>
</dependency>

GlobalScreen.registerNativeHook();
GlobalScreen.addNativeMouseListener(new NativeMouseAdapter() {
    @Override public void nativeMouseMoved(NativeMouseEvent e) { resetIdleTimer(); }
});
GlobalScreen.addNativeKeyListener(new NativeKeyAdapter() {
    @Override public void nativeKeyPressed(NativeKeyEvent e) { resetIdleTimer(); }
});

方案二:Swing 應用內部監聽

Toolkit.getDefaultToolkit().addAWTEventListener(e -> {
    if (e instanceof MouseEvent || e instanceof KeyEvent) resetIdleTimer();
}, AWTEvent.MOUSE_EVENT_MASK | AWTEvent.KEY_EVENT_MASK);

閒置計時器

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
Runnable resetIdleTimer = () -> {
    lastActiveTime = System.currentTimeMillis();
};
Runnable checkIdle = () -> {
    if (System.currentTimeMillis() - lastActiveTime > 10 * 60 * 1000) {
        // 設定使用者離線
        setUserOffline();
    }
};
scheduler.scheduleAtFixedRate(checkIdle, 1, 1, TimeUnit.MINUTES);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved