Медиатор с JavaFx

я пытаюсь использовать шаблон проектирования на моем посреднике. Чтобы мой графический интерфейс был разделен, а не имел все компоненты в одном классе.

И например, вам нужно было войти в программу, прежде чем использовать другие компоненты графического интерфейса. Поэтому создание класса Mediator, который создает экземпляр каждого элемента графического интерфейса, на который может ссылаться каждый из классов графического интерфейса (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();

    }

}

person Marc Rasmussen    schedule 15.11.2012    source источник
comment
Я не уверен, что вы пытаетесь сделать. Вы хотите запустить несколько приложений JavaFX?   -  person Puce    schedule 15.11.2012
comment
Да, у меня есть основной метод, который запускает посредник   -  person Marc Rasmussen    schedule 15.11.2012
comment
В приложениях JavaFX обычно имеется одно приложение и одна или несколько стадий, но не несколько приложений. Пожалуйста, объясните, если вам это нужно.   -  person Puce    schedule 15.11.2012


Ответы (2)


Вы запускаете приложение Java FX с помощью Application.launch. Я не думаю, что вы можете запускать более одного приложения на JVM, но я не пробовал (зачем вам это нужно?). Конечно, у вас может быть несколько этапов для каждого приложения.

Изменить: на самом деле Javadoc говорит: «Его нельзя вызывать более одного раза, иначе будет выдано исключение».

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

person Puce    schedule 15.11.2012
comment
Это хорошо, но вопрос в том, где применить шаблон проектирования. Так какова ваша настоящая цель? - person Puce; 15.11.2012
comment
Моя цель состоит в том, чтобы иметь какой-то контроллер, и как я буду использовать его для изменения компонентов в моем графическом интерфейсе? - person Marc Rasmussen; 15.11.2012
comment
проблема с наличием всего моего графического интерфейса в одном классе в качестве примера: мой графический интерфейс входа не должен быть в том же классе, что и мой графический интерфейс добавления пользователя, потому что вы не должны иметь возможность добавлять пользователя, если вы не вошли в систему - person Marc Rasmussen; 15.11.2012
comment
Отсюда трудно сказать, но из Swing Mediator обычно является родительской панелью. - person Puce; 15.11.2012
comment
хорошо, я мог задать этот вопрос неправильно, я думаю, мне нужно перефразировать - person Marc Rasmussen; 15.11.2012

Я полагаю, что вы ищете Platform.runLater() (см. Платформа) .

Это поместит ваше приложение в правильный поток. Однако вам все равно придется подумать об инициализации JavaFX Toolkit либо путем а) ​​расширения приложения с помощью Main вместо ShowUsers, либо б) с помощью JFXPanel, если вы используете это из приложения Swing.

person Hermann Hans    schedule 15.11.2012