Вам нужно три вещи.
1) Задача или поток, который выполняет обновление.
Вот один пример того, как выполнить задачу: https://www.quora.com/How-do-I-create-a-thread-which-runs-every-one-minute-in-Java. В этом примере используется 10-минутный интервал, но вы можете изменитьэто до 1 секунды.
2) ui.access()
Если вы обновляете интерфейс через второй поток, вам нужно обновить его в вызове ui.access()
, чтобы избежать повреждения данных или взаимоблокировок.
ui.access(() -> textField.setValue(elapsedSeconds));
Вы можете прочитать больше здесь: https://vaadin.com/docs/v14/flow/advanced/tutorial-push-access.html
3) Вам необходимо добавить @Push
к вашему виду.
Vaadin по умолчанию является фреймворком, который запускается при каждом обновлении. при взаимодействии с браузером, который выполняет обход сервера и затем отправляет инструкции обратно в браузер, сообщая, как должен обновляться пользовательский интерфейс. В отдельном потоке запрос на обновление не поступает из браузера. но сервер, поэтому нет открытого запроса браузера для ответа. Поэтому ни одно из обновлений пользовательского интерфейса не будет отображаться в браузере до того, как пользователь нажмет на что-либо. Когда вы добавляете аннотацию @Push
к вашему представлению, он указывает браузеру немедленно открыть запрос к серверу, который остается открытым, пока в браузере не появятся новые данные для отображения. В тот момент, когда данные поступают, они передаются в браузер.
Подробнее здесь: https://vaadin.com/docs/v14/flow/advanced/tutorial-push-configuration.html