Как получить доступ к потоку пользовательского интерфейса из дочернего потока в Vaadin 8 - PullRequest
0 голосов
/ 02 июля 2018

Я использовал Vaadin 7 раньше. Где я мог получить доступ к потоку пользовательского интерфейса из моего дочернего потока, используя следующий код: -

   UI.getCurrent().access(() -> {
            status.setVisible(true);
   });

Но в настоящее время я перехожу с Vaddin 7 на Vaadin 8. В Vaadin 8 UI.getCurrent () возвращает нуль из дочернего потока. Итак, как мы можем получить доступ к потоку пользовательского интерфейса из дочернего потока?

1 Ответ

0 голосов
/ 02 июля 2018

Предпочтительный шаблон в Vaadin - применять что-то вроде MVP (Model View Presenter).

Когда вы создаете View, расширяя Layout, вы можете использовать метод getUI () , который возвращает правильный экземпляр UI, когда Layout & View прикреплен. Это означает, что в вашем классе, реализующем View, вы также можете реализовать метод, который обновляет статус, скажем что-то вроде:

updateStatus(boolean visible) {
     getUI().access(() -> {
          status.setVisible(true);
     });
}

Если ваше приложение склонно к тому, чтобы пользователи охотно закрывали браузер, в плохих условиях в сети и т. Д., Вы можете захотеть окружить доступ (..) попыткой перехватить и поймать UIDetachedException, что может произойти, если соединение с браузером внезапно потеряно.

Ваш процесс в фоновом потоке может безопасно вызывать этот метод, то есть myView.updateStatus (true). Обычно это делается через Presenter

presenter.getView().updateStatus(true);
...