我开始一个与我的进度条绑定的任务的第一刻,后者开始并倒带然后重新启动,这次根据我的计数器(正如我预期的那样)。这种不受欢迎的效果非常微妙,但仍然可见。
以下是我的测试代码:
private void startButtonEventHandler(ActionEvent event) {
Service<Void> service = new Service<Void>() {
@Override
protected Task<Void> createTask() {
Task<Void> task = new Task<Void>() {
@Override
public Void call() throws Exception {
for (int i = 1; i <= 10; i++) {
// Long running task ...
Thread.sleep(500);
updateProgress(i, 10);
}
return null;
}
};
progressBar.progressProperty().bind(task.progressProperty());
return task;
}
};
service.start();
}
进度条是确定的:
progressBar = new ProgressBar(0.0F);
progressBar.setPrefWidth(200);
更新:我意识到progressBar在开始时以未终止模式启动,然后在第一次调用updateProgress()方法之后切换到确定模式。这是一个错误还是一个功能?
答案 0 :(得分:1)
任务的初始进度为-1
(即不确定)。 (这是有道理的,因为默认情况下,任务不知道需要多长时间......)因此,当您将进度条的进度绑定到任务的进度时,进度条将变得不确定。
创建任务时,只需将任务进度设置为0:
protected Task<Void> createTask() {
Task<Void> task = new Task<Void>() {
{
updateProgress(0, 10);
}
@Override
public Void call() throws Exception {
for (int i = 1; i <= 10; i++) {
// Long running task ...
Thread.sleep(500);
updateProgress(i, 10);
}
return null;
}
};
progressBar.progressProperty().bind(task.progressProperty());
return task;
}