JavaFX 2 StringProperty在封闭方法返回之前不会更新字段
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JavaFX 2 StringProperty在封闭方法返回之前不会更新字段,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1261字,纯文字阅读大概需要2分钟。
内容图文
![JavaFX 2 StringProperty在封闭方法返回之前不会更新字段](/upload/InfoBanner/zyjiaocheng/696/bbe380f713d34abd85c5a6066022142d.jpg)
我想在JavaFX应用程序中更新Label,以使文本随着方法运行而多次更改:
private void analyze(){
labelString.setValue("Analyzing"); // (labelString is bound to the Label during initialization)
// <Some time consuming task here>
labelString.setValue("Analysis complete!");
}
但是,当我运行此命令时,标签不会更新,直到任务完成为止,而仅显示之前的内容,直到analyzer()方法返回为止.
如何强制更新标签,以使其在开头显示“ Analyzing”(分析),然后显示“ Analysis complete!”(分析完成!).任务何时完成?
解决方法:
假设您正在FX Application Thread(例如在事件处理程序中)上调用analytics()方法,那么您耗时的代码将阻塞该线程并阻止UI更新直到完成.正如@ glen3b在评论中所说,您需要使用一个外部线程来管理此代码.
JavaFX提供了一个Task API,可帮助您完成此操作.特别是,它为您提供了在Java FX Application线程上调用代码的方法,使您可以从后台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();
}
如果您需要在任务完成时解除StringProperty的绑定,则可以执行
task.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
@Override
public void handle(WorkerStateEvent event) {
labelString.unbind();
}
});
内容总结
以上是互联网集市为您收集整理的JavaFX 2 StringProperty在封闭方法返回之前不会更新字段全部内容,希望文章能够帮你解决JavaFX 2 StringProperty在封闭方法返回之前不会更新字段所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。