我正在制作警报,它由两部分组成
在javafx
类中创建的动画按钮和通常创建的引擎
我需要的是每当用户按下关闭按钮的动画按钮并启动引擎然后在引擎关闭后会有一段时间然后再次出现动画按钮等等 所以我用了::
notify_me.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
new engine();
Platform.exit();
}
});
为了重复这个过程,我使用了
Timer t = new Timer(0,new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
while(true){
javafx.launch(javafx.class);
//some extra code goes here including sleep for
//some time and check for engine window state
}
}
});
t.start();
但我面临两个问题:
some extra code
一直没有实施,直到退出平台,launch()
不能多次调用那么如何在不使用线程的情况下实现呢?感谢
答案 0 :(得分:3)
你可能不会使用Thread
来解决。我建议不要关闭fx应用程序线程。关闭所有窗口并在延迟后再次显示(部分)它们:
@Override
public void start(Stage primaryStage) {
Button btn = new Button("Hide me 5 sec");
// prevent automatic exit of application when last window is closed
Platform.setImplicitExit(false);
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root);
primaryStage.setScene(scene);
// timer should be a daemon (-> not prevent jvm shutdown)
Timer timer = new Timer(true);
btn.setOnAction((ActionEvent event) -> {
timer.schedule(new TimerTask() {
@Override
public void run() {
// make window reappear (needs to happen on the application thread)
Platform.runLater(primaryStage::show);
}
}, 5000l);
// hide window
primaryStage.close();
});
// allow exiting the application by clicking the X
primaryStage.setOnCloseRequest(evt -> Platform.exit());
primaryStage.show();
}