【发布时间】:2019-09-09 06:03:04
【问题描述】:
我是 Java FX 的新手。如果用户在一段时间内不活动,我希望关闭我的 JavaFX 应用程序。换句话说,如果持续时间内没有任何鼠标事件或按键事件,应用程序会自动关闭。这可能是窗口的睡眠模式
我确实尝试了Auto close JavaFX application due to innactivity 的代码。但是我的程序不起作用
我从https://www.callicoder.com/javafx-fxml-form-gui-tutorial/ 得到一个例子。 我在 RegistrationFormApplication 类上进行了编辑
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();
}
});
感谢您的帮助
【问题讨论】:
-
使用您分享的链接中的@fabian 回答。
-
我看不到你在哪里打电话给
Platform.exit()。您的代码看起来只是一直在尝试加载 FXML 文件。 -
我使用了@fabian 编写的代码。但是,无论鼠标事件或按键按下,该程序都被计时器关闭。这是我没想到的。我花了很多时间在互联网上寻找某个地方但是这件事似乎很少被发布
-
请仔细阅读@Sedrick 的两个cmets,按照建议进行操作,如果您对fabian 的解决方案有疑问,请返回一个真正使用它的示例(如minimal reproducible example) :) 并重复强调: 你为什么一遍又一遍地重新加载内容?
-
您发布的代码将在执行
start方法期间产生异常,因为当您调用addEventFilter时root是null(除非您隐藏了一些代码在构造函数/初始化程序或init方法中)...此外,您可以在事件处理程序(System.out.println/Platform.exit)中做更简单的事情,关键帧的时间也不适合测试。让我们尽可能简单地查找/复制问题是一个好主意。
标签: java events javafx timer javafx-2