2017-11-25 59 views
1

我在javafx中的Task s上简单示例,其中Label文本由任务的进度更新。javafx - 标签不会更新任务进度

由于某些原因,Label未显示进度,而是从-1跳转到1(最终值)。

感谢您的帮助!

public class MultithreadingMain extends Application { 
    @Override 
    public void start(Stage primaryStage) throws Exception 
    { 
     HBox root = new HBox(); 

     Button button = new Button("Go"); 

     Task<Integer> task = new Task<Integer>() { 
      @Override 
      public Integer call() throws InterruptedException 
      { 
       int max = 100; 
       for(int i=0; i<max; i++) 
       { 
        Thread.sleep(50); 
        updateProgress(i+1,max); 
       } 
       System.out.println("Done"); 
       return 0; 
      } 
     }; 

     button.setOnAction(e -> { 
      Thread t = new Thread(task); 
      t.run(); 
     }); 

     Label label = new Label(""); 
     label.textProperty().bind(task.progressProperty().asString()); 

     root.getChildren().add(button); 
     root.getChildren().add(label); 

     Scene scene = new Scene(root, 400,400); 
     primaryStage.setTitle("Multithreading in java fx"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) 
    { 
     launch(args); 
    } 

} 

回答

2

你没有正确使用ThreadThread.run你只是执行的代码,而无需创建一个新的线程。将t.run();更改为t.start();