Возможное решение ...
class TaskCycle implements Runnable {
MyModal modal;
public TaskCycle(MyModal modal){
this.modal = modal
}
@Override
public void run() {
while(true) {
sleep(1000)
....
break_condition;
break;
}
modal.getLabel().setValue("xxxx");
modal.getLabel().getUI().push();
}
}
MyModal modal = new MyModal();
modal.show();
TaskCycle r = new TaskCycle (modal);
Thread t = new Thread(r);
t.start();
В целом, это решение хорошо работает, но требует настройки "vaadin server-pu sh" (см. Официальную документацию).
К сожалению, я использую Liferay 7, и сервер pu sh (из vaadin 8) не работает.
Это решение в моем случае не лучшее, потому что модал обновляется с новым значения (предоставленные потоком), только если вы выполняете «изменение размера» окна / вкладки браузера.
Чтобы «смоделировать» изменение размера, можно вставить функцию:
setPollInterval(1000);
UIEvents.PollListener poll = new UIEvents.PollListener(){
@Override
public void poll(UIEvents.PollEvent event) {
System.out.println("Poll interval start!!!!!");
}
};
UI.getCurrent().addPollListener(poll);
для удаления слушателя:
UI.getCurrent().removePollListener(poll);
это хороший обходной путь для всех пользователей, которые не могут использовать функцию pu sh ().