Фремворк : 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 subscriberjava.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.