检查程序是否处于空闲状态或在 Java 中运行了一段时间



我想创建一个桌面项目。如果该程序几分钟未使用,它应该会自动显示登录屏幕。我知道在Web应用程序中使用http servlet会话可以轻松完成(正如一些朋友所说(。 但是在javafx或桌面应用程序中如何实现。谁能告诉我...请

好的,所以基于使用事件过滤器,你可以做一些类似的事情......

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage primaryStage) {
TextField btn = new TextField();
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
scene.addEventFilter(KeyEvent.KEY_PRESSED, new KeyHandler());       
scene.addEventFilter(KeyEvent.KEY_RELEASED, new KeyHandler());      
scene.addEventFilter(KeyEvent.KEY_TYPED, new KeyHandler());     
scene.addEventFilter(MouseEvent.MOUSE_CLICKED, new MouseHandler());     
scene.addEventFilter(MouseEvent.MOUSE_ENTERED, new MouseHandler());     
scene.addEventFilter(MouseEvent.MOUSE_DRAGGED, new MouseHandler());     
scene.addEventFilter(MouseEvent.MOUSE_EXITED, new MouseHandler());      
scene.addEventFilter(MouseEvent.MOUSE_MOVED, new MouseHandler());       
scene.addEventFilter(MouseEvent.MOUSE_PRESSED, new MouseHandler());     
scene.addEventFilter(MouseEvent.MOUSE_RELEASED, new MouseHandler());        
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
protected class KeyHandler implements EventHandler<KeyEvent> {
@Override
public void handle(KeyEvent event) {
System.out.println("Key Event");
}
}
protected class MouseHandler implements EventHandler<MouseEvent> {
@Override
public void handle(MouseEvent event) {
System.out.println("Mouse Event");
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}

现在,这一切真正做的是为您提供有关事件发生时间的信息。您需要设置某种"超时",也许是类似于JavaFX定期后台任务的东西。

我个人的想法是让一个Timeline在短时间内(也许 1-5 秒(运行并检查上次输入的时间,如果超过"超时"期限,您可以切换到登录视图。 这样,您无需继续停止和启动Timeline

为此,我将使用 Java 8 中引入的新日期/时间 API。有关更多详细信息,请参阅期间和持续时间

啪......

我还发现...

scene.setOnKeyPressed(new KeyHandler());
scene.setOnKeyReleased(new KeyHandler());
scene.setOnKeyTyped(new KeyHandler());
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();

也可以工作。

我没有测试过它,但Stage也有addEventFilteraddEventHandler,这可能适合从上面到Stage而不是Scene建立相同的概念。

最新更新