java - 具有 JavaFx 进度条行为的 Pb

标签 java javafx

我开始与进度条绑定(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/

相关文章:

JavaFx检测鼠标移动(到达屏幕边界后)

java - 如何将 digamma 函数重写为非递归函数

java - 如何创建一个可以采用属性值模式的 LdapUserDetailsMapper?

java - 如何: Organize Buttons and stuff with JavaFX

java - 加载/显示 FXML 时避免动画中出现短暂的卡顿

java - 在Eclipse上导出应用程序后的不同字符

java - Camel 作为 JMS 客户端

java - 发生异常时 future 任务异步调用挂起

java - 如何使从 Java 逻辑内部的 Maven 构建失败?

browser - JavaFX - 它真的可以部署在浏览器中吗?