我尝试在线程中更改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
}
}
}
活动场景图中对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("");
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句