Метод execute периодически в фреймворк Vaadin графический инструментарий
Мне нужно выполнять метод класса каждые 10 секунд, но мне нужно делать это в основном потоке выполнения, потому что я должен обновить вещи на экране.
Я использую ScheduledExecutorService
:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(runnable, 0, 10, TimeUnit.SECONDS);
Runnable runnable= new Runnable() {
public void run() {
someStuff();
}
};
Возможно ли это?
1 ответ:
В Vaadin нет прямого аналога для "основного потока", большая часть логики приложения выполняется в рабочем потоке вашего движка сервлетов, и вы не можете использовать или резервировать его. Вместо этого вы должны просто изменить состояние пользовательского интерфейса с правильной блокировкой. Начиная с версии 7, Вы должны чаще всего использовать пользовательский интерфейс.access (Runnable) метод, который выполняет изменения пользовательского интерфейса с блокировкой должным образом и автоматически отправляет изменения в браузер, если используется push-соединение или опрос.
Вы можете использовать это с служба исполнителя. Исходя из вашего примера, это будет что-то вроде:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); Runnable runnable= new Runnable() { public void run() { myUitoBeModified.access(() -> someStuff()); } }; executor.scheduleAtFixedRate(runnable, 0, 10, TimeUnit.SECONDS);
Обратите внимание, что если ваш метод someStuff() содержит какое-то длительное выполнение, вы, вероятно, получите лучшие результаты, если не будете использовать его в пользовательском интерфейсе.доступ (Runnable) метод и поместить только фактическую модификацию пользовательского интерфейса в пользовательский интерфейс.метод доступа (Runnable).