Pb与JavaFx进度条行为

时间:2017-03-03 12:40:41

标签: java javafx

我开始一个与我的进度条绑定的任务的第一刻,后者开始并倒带然后重新启动,这次根据我的计数器(正如我预期的那样)。这种不受欢迎的效果非常微妙,但仍然可见。

以下是我的测试代码:

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()方法之后切换到确定模式。这是一个错误还是一个功能?

1 个答案:

答案 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;
}