Wal*_*ker 2 java javafx javafx-2 javafx-8
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");
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
运行上面的代码后,field.setText("START")没有执行,我的意思是textfield没有将其文本设置为"START",为什么?怎么解决这个?
请记住,在onActionJavaFX线程上调用按钮,因此您实际上会停止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();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1906 次 |
| 最近记录: |