У меня есть большая задача, которую нужно запустить в фоновом режиме. Задача создает коллекцию, и я рассчитываю построить значения на LineChart. Я мог легко сделать это раньше, не создавая задачу и не используя обычный HashMap, но это блокировало пользовательский интерфейс на время процесса сборки HashMap. Поэтому, чтобы исправить «блокировку пользовательского интерфейса», я создал работоспособную задачу, но теперь я не понимаю, как связать результат задачи с серией моей LineChart. Моя задача находится в классе StatsCalculator.
public class StatsCalculator extends Task<StatsCalculator> {
в этом классе, я использую метод run () для генерации сбора данных. Я сохраняю его в свойстве и настраиваю для него метод получения
private ObservableMap<String, Double> singleLoopTiming;
public ObservableMap<String, Double> getSingleLoopTiming() {
return this.singleLoopTiming;
}
И, наконец, у меня есть класс контроллера для моей страницы LineChart, на которой вызывается задача:
public class StatsViewController implements Initializable {
@FXML LineChart<String, Double> cLineChart;
@FXML ProgressIndicator progress;
public void updateChart() {
cLineChart.getData().clear();
Task<StatsCalculator> calculator = new StatsCalculator();
progress.visibleProperty().bind(calculator.runningProperty());
progress.progressProperty().bind(calculator.progressProperty());
new Thread(new Runnable() {
public void run() {
calculator.run();
}
}).start();
XYChart.Series<String, Double> seriesA = new XYChart.Series<>();
seriesA.setName("Single Loop");
Мне как-то нужно привязать seriesA
объект к методу getSingleLoopTiming()
класса StatsCalculator, но я не могу понять, как это сделать.
Я предполагаю, что это примерно так: seriesA.dataProperty().bind(***singleLoopTimingProperty()***);
но я не знаю, каким должен быть фактический параметр.