运行javaFX
程序,系统会自动创建一个FX application thread
线程,用于更新界面的组件信息,例如ListView
的items
、Label
的text
。当我们想运用多线程实现业务,而自己创建的线程又直接导致了界面组件信息的更新时,控制台就会抛出java.lang.IllegalStateException
异常。
完整异常栈如下
Exception in thread “pool-2-thread-1” java.lang.IllegalStateException: Not on FX application thread; currentThread = pool-2-thread-1
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:279)
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)
at javafx.scene.Parent2.onProposedChange(Parent.java:367)atcom.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:113)atcom.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:108)atcom.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:575)atcom.sun.javafx.scene.control.skin.LabeledSkinBase.handleControlPropertyChanged(LabeledSkinBase.java:204)atcom.sun.javafx.scene.control.skin.LabelSkin.handleControlPropertyChanged(LabelSkin.java:49)atcom.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda2.onProposedChange(Parent.java:367) at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:113) at com.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:108) at com.sun.javafx.scene.control.skin.LabeledSkinBase.updateChildren(LabeledSkinBase.java:575) at com.sun.javafx.scene.control.skin.LabeledSkinBase.handleControlPropertyChanged(LabeledSkinBase.java:204) at com.sun.javafx.scene.control.skin.LabelSkin.handleControlPropertyChanged(LabelSkin.java:49) at com.sun.javafx.scene.control.skin.BehaviorSkinBase.lambda2.onProposedChange(Parent.java:367)atcom.sun.javafx.collections.VetoableListDecorator.setAll(VetoableListDecorator.java:113)atcom.sun.javafx.collections.Vetoa