gpt4 book ai didi

JavaFX 2 StringProperty 在封闭方法返回之前不更新字段

转载 作者:行者123 更新时间:2023-11-29 07:47:33 25 4
gpt4 key购买 nike

我想更新 JavaFX 应用程序中的标签,以便文本在方法运行时更改多次:

private void analyze(){
labelString.setValue("Analyzing"); // (labelString is bound to the Label during initialization)
// <Some time consuming task here>
labelString.setValue("Analysis complete!");
}

但是当我运行它时,标签在任务完成之前不会更新,并且只会显示之前的内容,直到 analyze() 方法返回。

我如何强制更新标签,使其在开头显示“分析中”,然后显示“分析完成!”什么时候完成任务?

最佳答案

假设您在 FX 应用程序线程上调用您的 analyze() 方法(例如,在事件处理程序中),您的耗时代码会阻塞该线程并阻止 UI 更新,直到它完成.正如@glen3b 在评论中所说,您需要使用外部线程来管理此代码。

JavaFX 提供了一个 Task API这可以帮助你做到这一点。特别是,它提供了在 Java FX 应用程序线程上为您调用代码的方法,允许您从后台 Task 安全地更新 UI。

所以你可以做类似的事情

private void analyze() {
Task<Void> task = new Task<Void>() {
public Void call() {
updateMessage("Analyzing");
// time consuming task here
updateMessage("Analysis complete");
}
};
labelString.bind(task.messageProperty());
new Thread(task).start();
}

如果您需要在任务完成时解除绑定(bind)StringProperty,您可以这样做

task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
labelString.unbind();
}
});

关于JavaFX 2 StringProperty 在封闭方法返回之前不更新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24276013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com