尝试删除形状时出现JavaFX错误

时间:2014-10-07 19:19:25

标签: java javafx illegalstateexception

如果它被移动到屏幕的某个部分内,我正试图从窗口中删除一个矩形。

这是我得到的错误:

  

线程“Thread-1539”中的异常java.lang.IllegalStateException:不在FX应用程序线程上; currentThread = Thread-1539       at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:238)       at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:400)       在javafx.scene.Parent $ 1.onProposedChange(Parent.java:245)       at com.sun.javafx.collections.VetoableObservableList.remove(VetoableObservableList.java:172)       at com.sun.javafx.collections.ObservableListWrapper.remove(ObservableListWrapper.java:263)       at com.sun.javafx.collections.VetoableObservableList.remove(VetoableObservableList.java:179)       在MovementSample $ HandListener.onFrame(MovementSample.java:136)       在com.leapmotion.leap.LeapJNI.SwigDirector_Listener_onFrame(LeapJNI.java:495)

这是引起问题的代码片段:

if(areOverlapping(sauceRectangle, pizzaInside)) {
                if(isHolding == null) {
                    Group g = (Group) scene.getRoot().getChildrenUnmodifiable().get(1);
                    g.getChildren().remove(sauceRectangle);
                }
            }

其中areOverlapping()只是一种检查某些逻辑的方法 - 问题不存在。

我的问题是:如果我有场景,如何从屏幕上删除矩形。另外,我在代码中做错了什么?

1 个答案:

答案 0 :(得分:2)

错误说明了

  

IllegalStateException:不在FX应用程序线程

您正在尝试执行应该在JavaFX Application线程上执行的操作,而您不在其中。

要在JavaFX Application thread上执行操作,请使用Platform.runLater

将其包围起来
Platform.runLater(new Runnable() {
    @Override 
    public void run() {
       //Code to be executed on JavaFX App Thread
    }
});

有关Modifying UI components in JavaFX

的更多信息