Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动关闭Java FX应用程序可能是窗口的睡眠模式_Java_Events_Javafx_Timer_Javafx 2 - Fatal编程技术网

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

自动关闭Java FX应用程序可能是窗口的睡眠模式,java,events,javafx,timer,javafx-2,Java,Events,Javafx,Timer,Javafx 2,我是JavaFX新手。如果用户在一段时间内处于非活动状态,我希望关闭JavaFX应用程序。换句话说,若在这段时间内并没有任何鼠标事件或按键事件,应用程序将自动关闭,很可能是窗口的睡眠模式 我确实尝试了来自的代码。然而,我的程序不起作用 我从中得到了一个例子。 我编辑了注册申请课程 public class RegistrationFormApplication extends Application { private Timeline timer; Parent root ; @Overr

我是JavaFX新手。如果用户在一段时间内处于非活动状态,我希望关闭JavaFX应用程序。换句话说,若在这段时间内并没有任何鼠标事件或按键事件,应用程序将自动关闭,很可能是窗口的睡眠模式

我确实尝试了来自的代码。然而,我的程序不起作用

我从中得到了一个例子。 我编辑了注册申请课程

public class RegistrationFormApplication extends Application {
 private Timeline timer;
 Parent root ;
@Override
public 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();
         }
     });
公共类注册应用程序扩展应用程序{
私人时间计时器;
亲本根;
@凌驾
public void start(Stage primaryStage)引发异常{
计时器=新的时间线(新的关键帧(持续时间.秒(3600)),新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
//TODO自动生成的方法存根
root=null;
试一试{
root=fxmloader.load(getClass().getResource(“/example/registration_form.fxml”);
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
primaryStage.setTitle(“登记表FXML申请”);
原始阶段。设置场景(新场景(根,800500));
primaryStage.show();
}
}));
timer.setCycleCount(Timeline.unfinite);
timer.play();
root.addEventFilter(MouseEvent.ANY,new EventHandler()){
@凌驾
公共无效句柄(事件){
timer.playFromStart();
}
});
感谢您的帮助

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

import java.util.concurrent.TimeUnit;
导入io.reactivex.Observable;
导入io.reactivex.schedulers.schedulers;
导入io.reactivex.subjects.PublishSubject;
导入javafx.application.application;
导入javafx.application.Platform;
导入javafx.scene.scene;
导入javafx.scene.control.TextField;
导入javafx.scene.input.InputEvent;
导入javafx.stage.stage;
导入javafx.stage.WindowEvent;
公共类CloseAfterApp扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage)引发异常{
场景=新场景(new TextField());
PublishSubject sceneEventPublishable=PublishSubject.create();
PublishSubject windowEventPublishable=PublishSubject.create();
scene.addEventFilter(InputEvent.ANY,sceneEventPublishable::onNext);
stage.addEventFilter(WindowEvent.ANY,windowEventPublishable::onNext);
可观察。合并(场景EventPublishable,windowEventPublishable)
.switchMap(事件->可观察的.just(事件).delay(4,TimeUnit.SECONDS,Schedulers.single())
.subscribe(事件->平台.exit());
舞台场景;
stage.show();
}
}
获取并运行代码。在4秒不活动(缺少任何事件)后,它将关闭应用程序

import java.util.concurrent.TimeUnit;
导入io.reactivex.Observable;
导入io.reactivex.schedulers.schedulers;
导入io.reactivex.subjects.PublishSubject;
导入javafx.application.application;
导入javafx.application.Platform;
导入javafx.scene.scene;
导入javafx.scene.control.TextField;
导入javafx.scene.input.InputEvent;
导入javafx.stage.stage;
导入javafx.stage.WindowEvent;
公共类CloseAfterApp扩展应用程序{
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage)引发异常{
场景=新场景(new TextField());
PublishSubject sceneEventPublishable=PublishSubject.create();
PublishSubject windowEventPublishable=PublishSubject.create();
scene.addEventFilter(InputEvent.ANY,sceneEventPublishable::onNext);
stage.addEventFilter(WindowEvent.ANY,windowEventPublishable::onNext);
可观察。合并(场景EventPublishable,windowEventPublishable)
.switchMap(事件->可观察的.just(事件).delay(4,TimeUnit.SECONDS,Schedulers.single())
.subscribe(事件->平台.exit());
舞台场景;
stage.show();
}
}

从您共享的链接中使用@fabian answer。我看不出您在哪里调用
Platform.exit()
。您的代码似乎一直在尝试加载FXML文件。我使用了@fabian编写的代码。但是,无论鼠标事件或按键如何,程序都会被计时器关闭。我没有料到这一点。我花了很多时间在Internet上查找某个地方,但这件事似乎很少发布。请阅读@Sedrick ca的两条评论相反,按照建议去做,如果你对费边的解决方案有问题,回来举个例子(如图所示)这确实使用了它:)并重复强调:为什么要一次又一次地重新加载内容?在执行
start
方法的过程中,您发布的代码会产生一个异常,因为调用
addEventFilter
root
null
(除非您在构造函数/初始值设定项或
init
方法中隐藏一些代码)…此外,您可以在事件处理程序(
System.out.println
/
Platform.exit
)中执行更简单的操作关键帧的时间也不适合测试。最好让查找/复制问题对我们来说尽可能简单。使用您共享链接中的@fabian answer。我看不出您在哪里调用
Platform.exit()
。您的代码似乎一直在尝试加载FXML文件。我使用了@fabian编写的代码。但是,无论鼠标事件或按键如何,程序都会被计时器关闭