我有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();
});
答案 0 :(得分:2)
您是否尝试过使用以下命令在JavaFX应用程序线程中运行它:
Platform.runLater(() -> GraphicInterface.min(true));
只需在JavaFX应用程序线程中对GUI进行更改。