使用JavaFx的中介

使用JavaFx的中介,java,javafx,mediator,Java,Javafx,Mediator,我正在尝试在我的中介器上使用设计模式。为了将我的gui分离,而不是将所有组件放在一个类中 例如,在使用其他GUI组件之前,您需要登录该程序。因此,创建一个中介类,该类创建每个gui元素的实例,每个gui类(Login、addUser、ShowUser)在更改窗口时都可以引用该实例 public class Mediator { public Login login; public AddUser add; public ShowUsers su

我正在尝试在我的中介器上使用设计模式。为了将我的gui分离,而不是将所有组件放在一个类中

例如,在使用其他GUI组件之前,您需要登录该程序。因此,创建一个中介类,该类创建每个gui元素的实例,每个gui类(Login、addUser、ShowUser)在更改窗口时都可以引用该实例

 public class Mediator {

        public Login login;
        public AddUser add;
        public ShowUsers su;
        public Stage stage = new Stage();
        public Mediator(){
            login = new Login(this);
            add = new AddUser(this);
            su = new ShowUsers(this);
        }
        public void showUser() throws Exception{
            su.start(stage);
        }
    }
public class ShowUsers extends Application{
    private Mediator m;
    private Stage stage = new Stage();
    public ShowUsers(Mediator m){
        this.m =m;
    }
    @Override
    public void start(Stage stage) throws Exception {
        Group root = new Group();
        Scene scene = new Scene(root);

        stage.setScene(scene);

    }

}
我得到一个解释说:线程“main”java.lang.IllegalStateException中的异常:不在FX应用程序线程上;currentThread=main

如果我想使用调解人,我该如何解决这个问题

更新

public class Main {

    public static void main(String[] args) throws Exception{
        Mediator m = new Mediator();
        m.showUser();

    }

}

我相信您正在寻找
Platform.runLater()
(请参阅)


这将使您的应用程序位于正确的线程上。但是,您仍然需要考虑初始化JavaFX工具包,方法是a)使用
Main
而不是
ShowUsers
扩展应用程序,或者b)如果您在Swing应用程序中使用此工具,则使用a。

使用Application.launch启动Java FX应用程序。我不认为每个JVM可以启动多个应用程序,但我还没有尝试过(为什么要?)。当然,每个应用程序可以有几个阶段

编辑: 事实上,Javadoc说: “不能多次调用它,否则将引发异常。”


…)

我不知道你想做什么。你想启动几个JavaFX应用程序吗?是的,我有一个主方法可以启动中介程序。在JavaFX应用程序中,通常只有一个应用程序和一个或多个阶段,但不是几个应用程序。如果需要,请进一步解释。这是一件好事,但问题是在哪里应用设计模式。那么,您的实际目标是什么?我的目标是拥有一个控制器,以及如何使用它来更改GUI中的组件?将所有GUI放在一个类中的问题作为一个示例:我的登录GUI不应该与添加用户GUI位于同一个类中,因为您不应该添加用户,除非从这里很难分辨您的登录初始化,但是来自Swing,调解人通常是父窗格。好吧,我可能问错了这个问题,我想我需要重新措辞