0

Mediator でデザイン パターンを使用しようとしています。すべてのコンポーネントを 1 つのクラスにするのではなく、GUI を分離するためです。

たとえば、他の GUI コンポーネントを使用する前にプログラムにログインする必要がある場合などです。したがって、ウィンドウを変更するときに各 GUI クラス (Login、addUser、ShowUser) が参照できる各 GUI 要素のインスタンスを作成する Mediator クラスを作成します。

 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);

    }

}

私は例外を取得しています: Exception in thread "main" java.lang.IllegalStateException: Not on FX application thread; 現在のスレッド = メイン

メディエータを使用したい場合、どうすればこれを回避できますか?

アップデート

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()(プラットフォームを参照してください)。

これにより、アプリケーションが正しいスレッドに配置されます。Mainただし、a) Application を代わりに拡張するか、 ShowUsersb) Swing アプリケーション内から JFXPanel を使用している場合はJFXPanelを使用して、JavaFX Toolkit を初期化することを検討する必要があります。

于 2012-11-15T10:03:02.847 に答える