首页 > 解决方案 > ExecutorService - 用已完成任务的数量填充 JavaFX 中的进度条

问题描述

我有一个通过 ExecutorService 同时发送文件的代码。但是,我想在 JavaFX 中有一个进度条,它会填满发送的文件数。

我将如何做到这一点?

我正在通过创建任务List<Callable<String>> clientTasks = new ArrayList<>();,并通过启动它们es.invokeAll(clientTasks);

谢谢。

标签: javajavafxprogress-barexecutorservice

解决方案


您可以按照以下方式进行操作:

IntegerProperty completed = new SimpleIntegerProperty(0);
List<Callable<String>> wrappedTasks = new ArrayList<>();
for (Callable<String> task : clientTasks) {
    wrappedTasks.add(() -> {
        String result = task.call();
        Platform.runLater(() -> completed.set(completed.get()+1));
        return result ;
    });
}
completed.addListener((obs, oldValue, newValue) -> 
    progressBar.setProgress(1.0 * newValue.intValue() / clientTasks.size()));
es.invokeAll(wrappedTasks);

推荐阅读