【问题标题】:Pb with JavaFx progressbar behavior具有 JavaFx 进度条行为的 Pb
【发布时间】:2017-03-03 12:40:40
【问题描述】:

我开始与进度条绑定的任务的第一刻,后者开始并倒带然后重新启动,这一次根据我的计数器(如我所料)。这种不想要的效果非常微妙,但仍然可见。

下面是我的测试代码:

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

【问题讨论】:

  • 您是否尝试在启动服务之前将进度条的progress属性绑定到服务的progress属性而不是progressBar.progressProperty().bind(task.progressProperty());
  • 是的,我做到了,但它不能解决这种奇怪的行为。

标签: java javafx


【解决方案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;
}

【讨论】:

  • 哎呀还没有……还是那种烦人的效果。
  • 有时确实可以,有时会出现不确定的状态(我会说每 2 次尝试一次)。
  • 我试过你的更新它没有改变任何东西。与此同时,我在我的家用计算机上尝试了这段代码(下面是相同的 JDK 8.121 64),这次无论我运行多少次,都看不到可见的不确定状态。我的家用计算机内部装有 Core i7 I7-7700K Kaby Lake 处理器,而我的工作计算机运行在较旧的 Core i5 代上,我相信这可以解释整个差异。不过,我倾向于认为这是一个 JavaFX 错误,在当今的快速处理器中可能不会引起注意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多