3

何が間違っているのかわかりません。

GUI の上部にあるテキスト グラフィックを更新するタイマーを作成しました。ただし、タイマーが切れると、変数 (リスナーにリンクされている) が変更され、新しいグラフィック「シーン/グループ/ノード」が GUI に追加されます。

-変数を変更する //ChangeListener にリンク -GUI にシーンを追加する //リスナーではなく、GUI に新しい要素を追加する

これらの追加は両方とも、私のプログラムがそのエラーでクラッシュする原因となります:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: Not on FX application thread; currentThread = AWT-EventQueue-0
    at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:235)
    at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:393)

サンプル エラー コード:

int delay = new Integer(1000); //milliseconds
time_left=time_limit;


ActionListener taskPerformer = new ActionListener() {
        @Override
        public void actionPerformed(java.awt.event.ActionEvent arg0) {
            // TODO Auto-generated method stub
            timer.setText(time_left+" SECONDS LEFT");


            time_left=time_left-1;
            if (time_left<0)
            {
                //time_left=time_limit;
                mytimer.stop();
                //mytimer.start();
            root.getChildren().get(2).setOpacity(.2);
            //root.getChildren().add(3,newScene());         //This causes to crash      //Adds a new Scene to my GUI
            current_player.setValue(false);         //Also causes to crash - current_player has a Listener on it
                //System.out.println("TIMER RAN OUT!");
            }


        }
};
mytimer=new Timer(delay, taskPerformer);
mytimer.start();

私の current_player リスナー:

current_player.addListener(new ChangeListener<Boolean>() {

            @Override
            public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
//Code in Here
}
{);
4

1 に答える 1

1

例外メッセージは明白ではありませんか。イベント ディスパッチ スレッドでリスナーを呼び出すSwing timerを使用します(Swing アプリケーションを使用する場合に必要)。

ただし、FX アプリケーションのスレッドではなく、そのスレッドで JavaFX UI を更新します。

私は(まだ)JavaFXに精通していませんが、うまくいけば、それらにも使用できるタイマーメカニズム、またはメソッドEventQueue.invokeAndWaitで使用できる同様のものがあることを願っていますactionPerformed

編集:

少しグーグルで調べたところ、JavaFX の並行性に関するこのページが見つかりました。ただし、タイマークラスについては言及されていません。おそらく、Animationクラスはあなたが探しているものです

于 2012-04-03T05:30:24.037 に答える