2016-04-29 16 views
0

私は、javafxを使って3秒ごとに新しいサークルを作るプログラムを作ろうとしています。しかし、私は私のループをthread.sleep()で動かすと、ループが終わったときにサークルのグラフィックウィンドウが現れます。 たとえば、10個のサークルを作りたいと思います。 10個のサークルがすべて作成されると、グラフィックウィンドウが表示されます。しかし、私は最初のサークルが作られたときに私のグラフィックを表示したい。そしてその窓に3秒ごとに円が見つからない。javafxで円をthread.sleep()で作成する

@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'を呼び出しているため、フリーズして表示を更新できません。私はこれらの2つの質問はあなたにそれがどのようにすべきかというアイデアを与えるべきだと思います:[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を使用します。 Circleの実際の作成をPlatform.runLater呼び出しでラップするように注意してください。

また、アニメーションタイマーを使用して目標を達成することもできます。

関連する問題