2017-03-03 52 views
0

第一次啓動一個任務與我的進度條綁定,後者開始並倒帶,然後重新啓動,這次根據我的計數器(如我所料)。儘管如此,這種不需要的效果非常微妙但可見。Pb與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); 

更新:我意識到,進度在undeterminate模式在一開始啓動,然後在第一次調用後到updateProgress()方法它切換到確定模式。這是一個錯誤還是一個功能?

+0

你嘗試啓動該服務,而不是'進度之前,進度條的進度屬性服務的進度屬性綁定。 。progressProperty()結合(task.progressProperty());'? – Calculator

+0

是的,我做到了,但並沒有解決這個奇怪的行爲。 – Carthusianorum

回答

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; 
} 
+0

哎呀還沒...還是那個煩人的效果。 – Carthusianorum

+0

有時候確實有時會出現不確定狀態(我會說每2次嘗試一次)。 – Carthusianorum

+1

嘗試更新的版本。 –