在Java中检查程序是否空闲或运行一段时间

时间:2018-05-13 05:46:40

标签: java

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

1 个答案:

答案 0 :(得分:1)

好的,基于Working with Event Filters,你可以做点像......

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);
    }

}

现在,所有这些确实为您提供了有关事件发生时间的信息。您需要设置某种&#34;超时&#34;,可能类似于JavaFX periodic background task

我个人的想法是让Timeline在短时间内运行(也许1-5秒)并检查最后输入的时间长度,如果超过&#34;超时&#34;期间,您可以切换到登录视图。这样,您就不需要继续停止并启动Timeline

为此,我将使用Java 8中引入的新日期/时间API。有关详细信息,请参阅Period and Duration

PS ...

我也发现......

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