2017-08-08 108 views
0

我想使用ControlsFX StatusBar來顯示長時間運行任務的進度。問題是:在下面的代碼中,進度條僅顯示一次,但每次任務運行時控制檯輸出均正常。 我錯過了什麼嗎?ControlsFX StatusBar只顯示一次

public class Main extends Application { 

@Override 
public void start(Stage primaryStage) { 
    try { 
     TilePane root = new TilePane(); 
     Scene scene = new Scene(root, 500, 200); 
     Button btn = new Button("Start"); 
     StatusBar status = new StatusBar(); 
     status.setPrefWidth(200); 

     root.getChildren().addAll(btn, status); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 

     StatusTestService service = new StatusTestService(); 
     status.progressProperty().bind(service.progressProperty()); 
     status.progressProperty().addListener(inv -> System.out.println(status.getProgress())); 
     btn.setOnAction(event -> service.restart()); 

    } catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 

public static void main(String[] args) { 
    System.out.println(System.getProperty("java.version")); 
    launch(args); 
} 

class StatusTestService extends Service <Void> { 

    @Override 
    protected Task <Void> createTask() { 
     return new Task <Void>() { 

      @Override 
      protected Void call() throws Exception { 
       for (int i = 0; i < 10; i++) { 
        Thread.sleep(100); 
        updateProgress(i, 9); 
       } 
       return null; 
      } 
     }; 
    }  
} 
+0

你說「只顯示一次」是什麼意思?我已經運行了你的代碼示例,它工作正常:每次點擊「確定」按鈕時,進度開始再次從0加載到100。 –

+0

嗯,我只看到藍色欄** **第一次運行代碼時,在隨後的運行中沒有藍條,只有控制檯上的文本輸出。我使用controlsfx 8.40.13和Java 8u131 –

回答

0

您的代碼完美地使用controlsFX 8.40.12和java 8u144。這種行爲可能是由controlsFX中某種錯誤造成的。嘗試將庫降級到以前的版本和/或open issue

+0

我可以證實這一點。我還在一臺使用ControlsFX 8.40.13和java 8u77的機器上測試過,這也很好。問題在於java 8u131/8u144 **和**新的ControlsFX –