我希望每5秒显示一次隐藏表单。隐藏表单时-不再显示。我不明白为什么会这样。
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.setAlwaysOnTop(true);
primaryStage.show();
Platform.setImplicitExit(false);
Platform.runLater(() -> System.out.println("Inside Platform.runLater()"));
ScheduledExecutorService hider = Executors.newScheduledThreadPool(1);
hider.schedule(
new Runnable() {
@Override public void run() {
Platform.runLater(new Runnable() {
@Override public void run() {
if (primaryStage.isShowing()) {
primaryStage.hide();
} else {
primaryStage.show();
}
}
});
}
}, 5, TimeUnit.SECONDS);
答案 0 :(得分:0)
ScheduledExecutorService.schedule:
创建并执行一次动作
要定期执行某项操作,请使用ScheduledExecutorService.scheduleAtFixedRate:
创建并执行定期操作
在隐藏主要阶段之后,也不再次调用可运行对象,因此请使用handle_error
而不是隐藏:
setIconified(true)
考虑使用像 ScheduledExecutorService hider = Executors.newScheduledThreadPool(1);
hider.scheduleAtFixedRate(
() -> Platform.runLater(() -> {
if (!primaryStage.isIconified()) {
primaryStage.setIconified(true);
} else {
primaryStage.setIconified(false);
}
}),
5, //initial delay
5, //period delay
TimeUnit.SECONDS
);
这样的javafx动画工具的替代实现:
PauseTransition