为了账号安全,请及时绑定邮箱和手机立即绑定

自动关闭 Java FX 应用程序可能处于窗口睡眠模式

自动关闭 Java FX 应用程序可能处于窗口睡眠模式

www说 2023-07-19 14:56:26
我是 Java FX 新手。如果用户在一段时间内不活动,我希望关闭我的 JavaFX 应用程序。换句话说,如果一段时间内没有任何鼠标事件或按键事件,应用程序会自动关闭,这可能是窗口的睡眠模式由于 innactivity ,我确实尝试了自动关闭 JavaFX 应用程序中的代码。但是我的程序不起作用我从https://www.callicoder.com/javafx-fxml-form-gui-tutorial/得到一个示例。我编辑了 RegistrationFormApplication 类public class RegistrationFormApplication extends Application { private Timeline timer; Parent root ;@Overridepublic void start(Stage primaryStage) throws Exception{     timer = new Timeline(new KeyFrame(Duration.seconds(3600), new EventHandler<ActionEvent>() {        @Override        public void handle(ActionEvent event) {            // TODO Auto-generated method stub            root = null;            try {                root = FXMLLoader.load(getClass().getResource("/example/registration_form.fxml"));            } catch (IOException e) {                // TODO Auto-generated catch block                e.printStackTrace();            }                primaryStage.setTitle("Registration Form FXML Application");                primaryStage.setScene(new Scene(root, 800, 500));                primaryStage.show();                }     }));     timer.setCycleCount(Timeline.INDEFINITE);     timer.play();     root.addEventFilter(MouseEvent.ANY, new EventHandler<Event>() {         @Override         public void handle(Event event) {             timer.playFromStart();         }     });感谢帮助
查看完整描述

1 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

获取RxJavaFx并运行代码。4 秒不活动(没有任何事件)后,它将关闭应用程序。

   import java.util.concurrent.TimeUnit;


    import io.reactivex.Observable;

    import io.reactivex.schedulers.Schedulers;

    import io.reactivex.subjects.PublishSubject;

    import javafx.application.Application;

    import javafx.application.Platform;

    import javafx.scene.Scene;

    import javafx.scene.control.TextField;

    import javafx.scene.input.InputEvent;

    import javafx.stage.Stage;

    import javafx.stage.WindowEvent;


    public class CloseAfterApp extends Application {



        public static void main(String[] args) {

            launch(args);

        }


        @Override

        public void start(Stage stage) throws Exception {

            Scene scene = new Scene(new TextField());


            PublishSubject<InputEvent> sceneEventPublishable = PublishSubject.create();

            PublishSubject<WindowEvent> windowEventPublishable = PublishSubject.create();


            scene.addEventFilter(InputEvent.ANY, sceneEventPublishable::onNext);

            stage.addEventFilter(WindowEvent.ANY, windowEventPublishable::onNext);


            Observable.merge(sceneEventPublishable, windowEventPublishable)

            .switchMap(event -> Observable.just(event).delay(4, TimeUnit.SECONDS, Schedulers.single()))

            .subscribe(event -> Platform.exit());


            stage.setScene(scene);

            stage.show();

        }

    }


查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 267 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号