Skip to main content
Stack Overflow на русском

Вернуться к вопросу

Но после этого я получаю исключение 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)

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)

Но после этого я получаю исключение 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)

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

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)
Источник Ссылка
RedCape
  • 79
  • 10

Platform.runLater

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

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, НО я не понимаю куда. Ведь куда бы я не сунул везде ошибка о том что это не подходит..

lang-java

AltStyle によって変換されたページ (->オリジナル) /