2014-10-07 3 views
0

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

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

Исключение в потоке "Thread-1539" java.lang.IllegalStateException: Не на приложения FX нити; currentThread = резьбонарезной 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) at com.sun.javafx.collections.VetoableObservableList.remove (VetoableObservableList.java:172) at 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() это просто метод, который проверяет, какая-то логика - вопрос не существует.

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

+0

ошибка говорит, что 'IllegalStateException: Не на FX приложения thread'. Вы пытаетесь выполнить операцию, которая должна быть выполнена в приложении JavaFX Application, и вы не на ней, может быть, вы создали новый поток и пытаетесь управлять прямоугольником на нем. – ItachiUchiha

+0

Ах да, это так. Как подключить эти два потока? Или, другими словами, как мне это сделать? –

+0

Добавлен ответ для большей ясности – ItachiUchiha

ответ

2

ошибка говорит, что

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

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

Для того, чтобы выполнить вещи на 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

Смежные вопросы