最小化来自另一个线程的javafx阶段

时间:2019-03-01 13:27:34

标签: java javafx

我有2个正在运行的线程,一个正在侦听soket中的命令,另一个正在启动javafx应用程序

public class GraphicInterface extends Application implements Runnable {

  private static Stage primaryStage;


  public static void min(boolean bool) {
        getPrimaryStage().setIconified(bool);
  }

 @Override
    public void start(Stage stage) {
            GraphicInterface.setPrimaryStage(stage);
            Platform.setImplicitExit(false);
            this.primaryStage = stage;
            sceneParent = FXMLLoader.load(getClass().getResource("...url..."));
            Scene scene = new Scene(sceneParent);
            primaryStage.setScene(scene);
            getPrimaryStage().sizeToScene();
            getPrimaryStage().show();
        }


   @Override
    public void run() {
        launch();
    }

    public static Stage getPrimaryStage() {
        return primaryStage;
    }

    public static void setPrimaryStage(Stage primaryStage) {
        GraphicInterface.primaryStage = primaryStage;
    }

}

问题是当我想从另一个线程中最小化应用程序调用时

  GraphicInterface.min(true);

我得到了错误

Exception in thread "OTHER THREAD" java.lang.IllegalStateException: This operation is permitted on the event thread only; currentThread = OTHER THREAD

我该如何实现?

更新:

解决这个问题,而不是将GraphicInterface.min(true)放在另一个线程中,编写

            Platform.runLater(() -> {
                GraphicInterface.min();
            });

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用以下命令在JavaFX应用程序线程中运行它:

Platform.runLater(() -> GraphicInterface.min(true));

只需在JavaFX应用程序线程中对GUI进行更改。