gpt4 book ai didi

java - 从 UI JavaFX 监听后台线程

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:01 26 4
gpt4 key购买 nike

我有一个问题。我正在为桌面创建 JavaFX 应用程序。我的应用程序中有线程在后台运行,我们假设它正在从 Internet 下载文件。
我已阅读有关 JavaFX 中并发性的文章。有特殊的类任务。我用任务扩展了我的类(class)。但它只能返回一些值,然后它就会关闭。
但是我需要在整个应用程序生命周期内运行此任务,并且当例如下载文件时,它应该将结果发布到 UI 线程,更准确地说是在 Controller 上更新一些 ui 组件。
我知道 Task 有 updateProgress 方法,也许我不仅可以绑定(bind)它来接收整数,还可以绑定(bind)复杂的对象。
或者在我的案例中还有其他好的方法可以遵循。
请帮忙解决这个问题。

最佳答案

JavaFX 为您提供 ScheduledService可以安排重复性工作。 javadoc 说,

The ScheduledService is a Service which will automatically restart itself after a successful execution, and under some conditions will restart even in case of failure.

一个非常简单的例子是:

ScheduledService<Object> service = new ScheduledService<Object>() {
protected Task<Object> createTask() {
return new Task<Object>() {
protected Object call() {
// Connect to a Server
// Download the object
updateProgress(...);
return object; // Useful in case you want to return data, else null
}
};
}
};
service.setPeriod(Duration.seconds(10)); //Runs every 10 seconds
//bind the service progress/message properties
progressBar.progressProperty().bind(service.progressProperty());

也有非 javafx 方法可以实现这一点,您可以使用:

关于java - 从 UI JavaFX 监听后台线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29064742/

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