2016-04-29 60 views
0

我正在嘗試使每三秒鐘使用javafx創建新的圓的程序。但是當我用thread.sleep()運行我的循環時,循環結束時出現帶有圓圈的圖形窗口。例如,我想製作10個圓圈。當所有10個圓圈被製成時,我的圖形窗口將會出現。但是我想讓我的圖形在第一個圓圈出現時出現。在那個窗口上,每三秒鐘就會出現一個圈子。使用thread.sleep創建javafx中的圓圈()

@Override 
    public void start(Stage primaryStage) throws Exception 
    { 
     Pane pane = new Pane(); 
     //pane.setStyle("-fx-fill: linear-gradient(orange,orangered,blue);"); 
     pane.setPrefSize(1200,1000); 
     pane.getChildren().add(new MyCircle().getCircle()); 
     for(int i=0; i<10; i++) 
     { 
      try 
      { 
       Thread.sleep(3000); 
      }catch(InterruptedException e){} 
      pane.getChildren().add(new MyCircle().getCircle()); 
     } 
     Form f = new Form("This is hello world", pane); 
    } 

我做了具有場景的Form類,並且還製作了Circle類,它給了我所需的位置和樣式的圈子。在上面的這個程序中,當所有的圈子被製作時,我的gui會出現。

+0

我不知道javafx,但它聽起來像你需要在每次睡眠之前激活其事件循環。 – totoro

+1

您正在調用JavaFX UI線程上的'Thread.sleep',因此它凍結,無法更新顯示。我認爲這兩個問題應該讓你知道它應該如何完成:[從工作線程更新UI](http://stackoverflow.com/questions/20497845/constantly-update-ui-in-java-fx-worker線程阻塞JavaFX UI更新](http://stackoverflow.com/questions/33112560/why-is-a-thread-blocking-my-javafx-ui-thread) – Itai

回答

2

作爲JavaFX的經驗法則:無論何時您試圖使用Thread.sleep重新考慮您的設計,因爲它可能是錯誤的!

在您的特殊情況下,有多種方法可以解決此問題。我會親自使用ScheduledThreadPoolExecutor。只要注意在Platform.runLater調用中包裝Circles的實際創建。

您也可以使用AnimationTimer來實現您的目標。