6

我尝试在线程中更改 JavaFX GUI 节点,但看到以下错误:

线程“Thread-8”java.lang.IllegalStateException 中的异常:不在 FX 应用程序线程上;当前线程 = 线程 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 thread当您尝试从 JavaFX 应用程序线程修改场景图节点的属性时,JavaFX 将抛出异常。即使您没有收到 IllegalStateException,您也不应该在 JavaFX 应用程序线程之外修改场景图节点,因为如果您这样做,您的代码可能会意外失败。

在Platform.runLater调用中包装用于操作场景图节点的代码,以允许 JavaFX 系统在 JavaFX 应用程序线程上运行代码。

例如,您可以使用以下代码修复示例程序:

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