在事件處理裏更改了 Lable 的內容。但不會立即顯示。例如:
public void start(Stage stage){
Label lable1 = new Label("0");
Button button1 = new Button("pause me");
button1.setOnAction(e ->{
for(int i = 0; i < 1000; ++i){
try {
Thread.sleep(10);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
lable1.setText(String.valueOf(i));
}
});
Pane pane = new VBox();
pane.getChildren().addAll(lable1, button1);
pane.setPadding(new Insets(15, 15, 15, 15));
Scene scene = new Scene(pane);
stage.setTitle("Testing");
stage.setScene(scene);
stage.show();
}
會直接顯示999(有時還會沒有回應)
所以想問有沒有一個更新畫面的函數, 還是有其他方法呢?
根据JavaFX文档,事件响应操作不应阻塞FX应用线程(FX application thread),所以不要在回调里调用Thread.sleep。
你可以用FX提供的javafx.concurrent.Task类型来实现你想要的效果:
button1.setOnAction(e ->
{
Task<Void> task = new Task<Void>()
{
@Override
protected Void call() throws Exception
{
for (int i = 0; i < 1000; i++)
{
updateMessage("" + i);
try
{
Thread.sleep(10);
} catch (InterruptedException ex)
{
}
}
return null;
}
};
lable1.textProperty().bind(task.messageProperty());
new Thread(task).start();
});
######
這起了作用,謝謝你。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。