如何在 JavaFX 中使用双重绑定更新进度条?

How do I Update a Progress bar Using Double Binding in JavaFX?

我有一个 List 任务,它们都更新一个名为 totalProgress 的公共进度条。此条针对​​每个任务单独更新。我已经尝试创建一个 DoubleBinding 对象,以便能够根据每个任务的平均进度更新进度条,但它不起作用。

参考post:Multiple Tasks JavaFX

这是我尝试使用的代码:

double p = 0.0;
for (final Task t : tasks) {
    threadPool.submit(t);
    DoubleBinding totalProgress = Bindings.createDoubleBinding(new Callable<Double>() {
        @Override
        public Double call() {
            p = (p+t.getProgress()) / tasks.size();
            System.out.println("P"+p + "Progress"+t.getProgress());
            return p;
        }
    });
    bar.progressProperty().bind(totalProgress);
    //bar.progressProperty().bind(t.progressProperty());
    t.setOnSucceeded(handler);
}
threadPool.shutdown();

按照您链接的示例中的相同方式执行此操作:

Observable[] progressProps = new Observable[tasks.size()];

for (int i = 0 ; i < tasks.size(); i++) {
    progressProps[i]=tasks.get(i).progressProperty();
}

DoubleBinding totalProgress = Bindings.createDoubleBinding(new Callable<Double>() {
    @Override
    public Double call() {
        double total = 0 ;
        for (Task task : tasks) {
            total = total + task.getProgress();
        }
        return total / tasks.size();
    }
}, progressProps);
bar.progressProperty().bind(totalProgress);


for (final Task t : tasks) {
    threadPool.submit(t);
    t.setOnSucceeded(handler);
}