使用javafx,在单击一个按钮上,我想执行此操作:
spinBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
field.setDisable(false);
//Delay for 10 seconds
field.setDisable(true);
}
});
我很快意识到睡觉无法正常工作,因为它完全冻结了GUI。我还尝试过睡眠线程以获取计时器,但是如果我想要延迟的输入,那仍然会冻结GUI。(如下)
spinBtn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
ExampleTimerThread exampleSleepyThread = new ExampleTimerThread();//this extends Thread
exampleSleepyThread.start();
//thread sleeps for 10 secs & sets public static boolean finished = true; after sleep
while(finished == true){
field.setDisable(false);
}
}
});
我该怎么做才能防止此代码冻结GUI?我知道有一个计时器。Javafx中是否有类似的东西?
使用 PauseTransition
延迟事件:
spinBtn.setOnAction(e -> {
field.setDisabled(false);
PauseTransition pt = new PauseTransition(Duration.seconds(10));
pt.setOnFinished(ev -> {
field.setDisabled(true);
});
pt.play();
});