【发布时间】:2017-12-04 08:28:53
【问题描述】:
使用 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? 我知道在 Swing 中有一个计时器。 JavaFX中是否有类似的东西?
【问题讨论】:
-
您可以在 10 秒后从线程中尝试
Platform.runLater,然后在主线程中调用一个现在禁用文本字段的函数。 -
我认为这可以正常工作,但从我的尝试来看,它给我带来了问题,我认为必须有一种不同的、更简单的方法(在我看来),就像 MBec 的回答一样。
-
我同意,MBec 的回答似乎更合适。
标签: java javafx java-8 javafx-8