使用JavaFx的中介
我正在尝试在我的中介器上使用设计模式。为了将我的gui分离,而不是将所有组件放在一个类中 例如,在使用其他GUI组件之前,您需要登录该程序。因此,创建一个中介类,该类创建每个gui元素的实例,每个gui类(Login、addUser、ShowUser)在更改窗口时都可以引用该实例使用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
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,调解人通常是父窗格。好吧,我可能问错了这个问题,我想我需要重新措辞