我正在制作一个桌面应用程序,它将计算机文件与数据库同步。它每5秒安排一次,检查是否有互联网连接 我正在使用TimeLine进行计划和服务(任务)来重复此任务:
我的日程安排:
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();
}
}
但是只要需要更新,它就会开始冻结我的GUI。 有什么办法可以避免吗? 提前谢谢。