Platform.runLater问题-延迟执行
Button button = new Button("Show Text");button.setOnAction(new EventHandler<ActionEvent>(){
@Override
public void handle(ActionEvent event) {
Platform.runLater(new Runnable(){
@Override
public void run() {
field.setText("START");
}
});
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
Platform.runLater(new Runnable(){
@Override
public void run() {
field.setText("END");
}
});
}
});
运行上面的代码后,field.setText("START")
未执行,我的意思是文本字段未将其文本设置为“ START”,
如何解决呢?
回答:
请记住,该按钮onAction
在JavaFX线程上被调用,因此您实际上将UI线程暂停了5秒钟。在这五秒钟的末尾取消冻结UI线程时,将同时应用这两个更改,因此最终只能看到第二个。
您可以通过在新线程中运行以上所有代码来解决此问题:
Button button = new Button(); button.setOnAction(event -> {
Thread t = new Thread(() -> {
Platform.runLater(() -> field.setText("START"));
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
Platform.runLater(() -> field.setText("END"));
});
t.start();
});
以上是 Platform.runLater问题-延迟执行 的全部内容, 来源链接: utcz.com/qa/415943.html