ExecutorService - 用已完成任务的数量填充 JavaFX 中的进度条
ExecutorService - fill up progress bar in JavaFX with the number of finished tasks
我有一个代码可以通过 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);
我有一个代码可以通过 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);