Я создаю настольное приложение, которое синхронизирует файл компьютера с базой данных. Планируется каждые 5 секунд, чтобы проверить, есть ли подключение к интернету
Я использую TimeLine для расписания и Service (Task) для повторения этой задачи:
Мой график:
public void sync() {
SyncTask syncTask = new SyncTask(bar);
Timeline timeline = new Timeline(new KeyFrame(Duration.seconds(5),
e -> {
if (needSync() && syncTask.isDone()) {
syncTask.bind();
syncTask.start();
}
}));
timeline.setCycleCount(Animation.INDEFINITE);
timeline.play();
}
Мой класс SyncTask:
private class SyncTask {
private ProgressBar bar;
public SyncTask(ProgressBar bar) {
this.bar = bar;
}
Service<Boolean> service = new Service<Boolean>() {
@Override
protected Task<Boolean> createTask() {
return new Task<Boolean>() {
@Override
public Boolean call() {
return syncSomethingHere();
}
};
}
};
public void bind() {
bar.progressProperty().bind(service.progressProperty());
bar.setVisible(true);
service.setOnSucceeded(ev -> {
bar.setVisible(false);
});
}
public void start() {
service.restart();
}
public boolean isDone() {
return !service.isRunning();
}
}
Но он начинает зависать в моем графическом интерфейсе всякий раз, когда ему нужно обновить.
Есть ли способ, которым я могу избежать этого?
Заранее спасибо.