java - ExecutorService - 用已完成任务的数量填充 JavaFX 中的进度条
问题描述
我有一个通过 ExecutorService 同时发送文件的代码。但是,我想在 JavaFX 中有一个进度条,它会填满发送的文件数。
我将如何做到这一点?
我正在通过创建任务List<Callable<String>> clientTasks = new ArrayList<>();
,并通过启动它们es.invokeAll(clientTasks);
谢谢。
解决方案
您可以按照以下方式进行操作:
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);
推荐阅读
- python - 如何在 Python 中缩放 numpy 矩阵?
- python - pip install jupyterlab 错误:命令出错,退出状态为 1:
- java - 我可以让 maven 使用这个包结构运行吗?我应该如何改变它?
- scala - 使用 @ 指定 Scala 形式的电子邮件
- assembly - 尝试编写准系统 64 位内核时“重定位被截断以适应”
- python - 斐波那契数列之和的代码没有给出正确的和
- ssas - 分区数据与数据源视图
- r - 如何计算每行数据集中唯一元素的存在并将它们列出在r中
- drupal - 在 drupal 8 安装上呈现实体字段标记
- dns - 为什么 `getaddrinfo` 不支持别名?