JavaFX RunAsync с индикатором выполнения и runLater

#javafx #tornadofx

#javafx #tornadofx

Вопрос:

Мой код загружает соединения асинхронно:

 runAsync {
    controller.loadConnections(viewModel)
} ui {
    table.items = it
    table.refresh()
}
 

и внутренний loadConnections метод:

 //read connections from file and then 
Platform.runLater(() -> {
    CollectionsKt.bind(connections, databases, ConnectionsModel::new);
    connections.forEach(connection -> connection.setOwner(viewModel));
});
 

Когда я хочу добавить индикатор выполнения как:

 private val status = TaskStatus()
runAsync(status) {
    controller.loadConnections(viewModel)
} ui {
    table.items = it
    table.refresh()
}
 

Но это блокирует индикатор прогресса. Как я понимаю , 2 задачи ( progress и Platform.runLater ) не выполняются внутри async . Но как мне заставить это работать?

Комментарии:

1. не имеет прямого отношения (и не слишком хорошо знаком с tornadofx, просто предполагая, что table.refresh такой же, как в обычном javafx): не используйте его — кажущаяся необходимость может указывать на неправильное подключение данных / представления

Ответ №1:

Попробуйте этот код:

 CompletableFuture.runAsync(() -> {
    for (int n = 1; n > size; n  )
        progressBar.setProgress(n);
});