使用JavaFx的Mediator

时间:2012-11-15 09:58:02

标签: java javafx mediator

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

例如,您需要在使用其他GUI组件之前登录该程序。因此,创建一个Mediator类,创建每个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();

    }

}

2 个答案:

答案 0 :(得分:1)

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

编辑: 实际上Javadoc说: “不得多次调用它,否则将抛出异常。”

http://docs.oracle.com/javafx/2/api/javafx/application/Application.html#launch(java.lang.String ...)

答案 1 :(得分:0)

我相信你正在寻找Platform.runLater()(见Platform)。

这会将您的应用程序放在正确的线程上。但是,您仍然需要考虑通过以下方式初始化JavaFX Toolkit:a)使用Main而不是ShowUsers扩展应用程序,或者b)如果您在Swing中使用此方法,则使用JFXPanel应用