0

我正在尝试在我的调解器上使用设计模式。为了让我的 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);

    }

}

我收到一个异常消息:线程“主”java.lang.IllegalStateException 中的异常:不在 FX 应用程序线程上;当前线程 = 主线程

如果我想使用调解器,我该如何解决?

更新

public class Main {

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

    }

}
4

2 回答 2

1

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

编辑:事实上,Javadoc 说:“它不能被多次调用,否则会抛出异常。”

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

于 2012-11-15T10:28:16.027 回答
0

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

这会将您的应用程序放在正确的线程上。但是,您仍然必须考虑通过 a) 使用Main而不是扩展 ApplicationShowUsers或 b)如果您在 Swing 应用程序中使用JFXPanel来初始化 JavaFX Toolkit。

于 2012-11-15T10:03:02.847 回答