2017-08-08 76 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 –