Platform.runLater

140
24 июля 2019, 04:50

Я хочу открыть новое окно в контроллере другого окна через другой класс. На пример вот функция которая находится в контроллере:

public void openNewScene(String Window)  {
        search.setVisible(false);
        playButton.getScene().getWindow().hide();
        FXMLLoader loader =new FXMLLoader();
        loader.setLocation(getClass().getResource(Window));
        Const.gameController = (GameController) loader.getController();
        try {
            loader.load();
        }catch (IOException e) {
            e.getMessage();
        }
        Parent root = loader.getRoot();
        final Stage stage = new Stage();
        stage.initStyle(StageStyle.TRANSPARENT);
        root.setOnMousePressed(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                xOffset = event.getSceneX();
                yOffset = event.getSceneY();
            }
        });
        root.setOnMouseDragged(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                stage.setX(event.getScreenX() - xOffset);
                stage.setY(event.getScreenY() - yOffset);
            }
        });
        stage.setScene(new Scene(root));
        stage.setResizable(false);
        stage.show();
    }

Она вызывается в другом классе(мини-сервере) когда туда посылается опред. сигнал:

  if (type == MessageTypes.SEARCH_REPLY) {
     Const.menuController.openNewScene("/Main/GameWindow/GameWindow.fxml");
  }

Но после этого я получаю исключение

Exception in thread "Thread-3" java.lang.IllegalStateException: Not on FX application thread; currentThread = Thread-3
    at javafx.graphics/com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:291)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423)
    at javafx.graphics/javafx.stage.Window.setShowing(Window.java:1185)
    at javafx.graphics/javafx.stage.Window.hide(Window.java:1211)
    at Main.Menu.MenuController.openNewScene(MenuController.java:207)
    at Main.ClientServer.run(ClientServer.java:40)

Это означает что я хочу обраться к FX объекту не через FX поток и нужно добавить Platform.runLater, НО я не понимаю куда. Ведь куда бы я не сунул везде ошибка о том что это не подходит..

READ ALSO
Таблицы стилей css по умолчанию в разных браузерах

Таблицы стилей css по умолчанию в разных браузерах

Какие стили css присваиваются браузерами по умолчанию?

134
@import normalize.css в scss

@import normalize.css в scss

работаю с gulp поставил модуль normalizecss хочу его стили импортировать в scss если импортировать по типу:

176