6

スレッドで JavaFX GUI ノードを変更しようとしましたが、次のエラーが表示されます。

スレッド「Thread-8」での例外 java.lang.IllegalStateException: FX アプリケーション スレッドではありません。currentThread = スレッド-8

エラーを生成するサンプル コード:

public class Controller { 
  public Label label = new Label();

  public void load() {
    MyThread myThread = new MyThread();
    myThread.start();
  }

  public class MyThread extends Thread {
    public void run() {
      ......
      label.setText(""); // IllegalStateException: Not on FX application thread
    }
  }
}
4

1 に答える 1

9

アクティブなシーン グラフ内の JavaFX ノードのすべての操作は、JavaFX アプリケーション スレッドで実行する必要があります。そうしないと、プログラムが正しく動作しない可能性があります。

IllegalStateException: Not on FX application threadJavaFXアプリケーション スレッドからシーン グラフ ノードの属性を変更しようとすると、JavaFX は例外をスローします。IllegalStateException が発生しない場合でも、コードが予期せず失敗する可能性があるため、JavaFX アプリケーション スレッドからシーン グラフ ノードを変更しないでください。

シーン グラフ ノードを操作するコードをPlatform.runLater呼び出しでラップして、JavaFX システムが JavaFX アプリケーション スレッドでコードを実行できるようにします。

たとえば、次のコードを使用してサンプル プログラムを修正できます。

Platform.runLater(new Runnable() {
  @Override public void run() {
    label.setText("");                       
  }
}
于 2013-11-13T05:00:25.190 に答える