Как код выполняется после запуска новой сцены - PullRequest
0 голосов
/ 07 мая 2018

У меня есть сцена, которая загружена, и я загружаю другую сцену из существующей сцены.

После загрузки новой сцены у меня был какой-то другой код, который я хотел выполнить (отправка некоторых данных в шину событий).

Вот код:

stage.close();
home.start(stage);

System.out.println("How does the code get here?");
EventBus.getDefault().post(new LoginEvent(...);

Я понимаю, как функционирует строка 1,2. Однако после второй строки я подумал, что используемый в настоящее время класс контроллера перестает работать, когда новая сцена вступает во владение. Может кто-нибудь объяснить, как и новая сцена запускается, и код продолжается до оператора print?

Означает ли это, что, хотя я закрыл текущую сцену, настоящий контроллер все еще используется?

Edit 1: home - это класс, который содержит метод для новой сцены и запускает новое окно. stage - это button.getScene().getWindow(), где кнопка - это кнопка, которую пользователь нажимает, чтобы начать новую сцену.

Редактировать 2: Мой вопрос не является дубликатом связанного, потому что у меня был вопрос о том, как код продолжается, и поток не был заблокирован. Я думал о классе графического интерфейса другой. Однако ответ Фабиана прояснил мое замешательство.

Спасибо!

1 Ответ

0 голосов
/ 07 мая 2018

Загрузка / показ новой сцены не блокирует поток. На самом деле было бы плохо, если бы вы блокировали поток, поскольку это могло бы заморозить графический интерфейс, не позволяя потоку выполнять свою работу (макет, рендеринг, обработка событий и т. Д.).

Метод запуска приложения или аналогичные методы просто устанавливают некоторые данные, которые впоследствии используются потоком приложения для макета / рендеринга.

Это (очень приблизительно) работает аналогично следующей программе без графического интерфейса:

public class Application {

    private List<String> data;

    public void start(List<String> data) {
        // set up initial data
        data.add("Hello World");
        data.add("42");
        this.data = data;
    }

    public void handleInput(String input) {
        // react to user input
        data.clear();
        data.add("Your input was: " + input);
    }

}
public class Launcher {
    public static void main(String[] args) {
        List<String> data = new ArrayList<>();
        Application app = new Application();
        app.start(data);
        Scanner scanner = new Scanner(System.in);
        System.out.println("the current data is: " + data); // "render"
        String line;
        while (!"exit".equals(line = scanner.nextLine())) { // loop is done by the framework
            app.handleInput(line); // handle input event
            System.out.println("the current data is: " + data); // "render"
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...