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

回到顶部