我开始与进度条绑定(bind)的任务的第一刻,进度条开始并倒回然后重新启动,这次根据我的计数器(正如我预期的那样)。这种不良影响非常微妙,但仍然可见。
下面是我的测试代码:
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);
更新:我意识到进度条一开始以不确定模式启动,然后在第一次调用 updateProgress() 方法后切换到确定模式。这是一个错误还是一个功能?
最佳答案
任务的初始进度为-1
(即不确定)。 (这是有道理的,因为默认情况下任务不知道需要多长时间...)因此,当您将进度条的进度绑定(bind)到任务的进度时,进度条变得不确定。
只需在创建任务时将任务进度设置为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;
}
关于java - 具有 JavaFx 进度条行为的 Pb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42579147/