@Romario21

Java доступ к основному потоку?

Фремворк : Vaadin flow
Товарищи помогите.
Задача с периодичность запускать получение данных в потоке и отправлять сообщение в основной класс(Eventbus).

Вот мой код , падает он на отправке сообщения:
Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                System.out.println("timer: "+Thread.currentThread());
                Callable task = () -> {
                   //Выполняем какую-то фигню возвращающую результат
                    Login login = new Login();
                    login.setMESSAGE(MessageCode.LOGIN_ERROR);
                    return login;
                };
                ExecutorService executor = Executors.newSingleThreadExecutor();
                Future<Login> future = executor.submit(task);
                try {
                    Login message = future.get();
                    MainView.eventBus.post(message);//Кидаем сообщение

                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
                executor.shutdown();
            }
        }, 0, 3500);


Если вынести код из таймера, то все нормально

Вот что выводится в консоль:
SEVERE [Timer-0] com.google.common.eventbus.EventBus$LoggingHandler.handleException Exception thrown by subscriber method taskAutorization(Objects.Login) on subscriber

java.lang.IllegalStateException: UI instance is not available. It means that you are calling this method out of a normal workflow where it's always implicitely set. That may happen if you call the method from the custom thread without 'UI::access' or from tests without proper initialization.
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
поищите про

asyncExec()
(типа
.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
- это для SWT
для Swing смотрите
invokeLater()

для JavaFx не помню но найдя первые два разберетесь с ним надеюсь сами
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы