Ошибка JavaFX при попытке удалить фигуру

Я пытаюсь удалить прямоугольник из своего окна, если он перемещен в определенную часть экрана.

Это ошибка, которую я получил:

Исключение в потоке "Thread-1539" java.lang.IllegalStateException: не в потоке приложения FX; currentThread = Thread-1539 в com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:238) в com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:400) в javafx.scene. Parent$1.onProposedChange(Parent.java:245) на com.sun.javafx.collections.VetoableObservableList.remove(VetoableObservableList.java:172) на com.sun.javafx.collections.ObservableListWrapper.remove(ObservableListWrapper.java:263) на 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() - это просто метод, который проверяет некоторую логику - проблема не в этом.

У меня такой вопрос: как убрать прямоугольник с экрана, если у меня есть сцена. Кроме того, что я сделал неправильно в своем коде?


person Alex K    schedule 07.10.2014    source источник
comment
Ошибка говорит, что это IllegalStateException: Not on FX application thread. Вы пытаетесь выполнить операцию, которая должна выполняться в потоке приложения JavaFX, но вы не в нем, возможно, вы создали новый поток и пытаетесь управлять прямоугольником на нем.   -  person ItachiUchiha    schedule 07.10.2014
comment
Ах да, это так. Как связать эти два потока? Или, другими словами, как заставить другой поток сделать это?   -  person Alex K    schedule 07.10.2014
comment
Добавил ответ для большей ясности   -  person ItachiUchiha    schedule 07.10.2014


Ответы (1)


Ошибка говорит об этом

IllegalStateException: не в потоке приложения FX

Вы пытаетесь выполнить операцию, которая должна выполняться в потоке приложения JavaFX, а вы не в нем.

Чтобы выполнять действия на JavaFX Application thread, окружите их Platform.runLater

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

Для получения дополнительной информации об изменении пользовательского интерфейса компоненты в JavaFX

person ItachiUchiha    schedule 07.10.2014