Всем привет, прощу помощи у тех кто знаком с фреймворком Vaadin
Вообщем суть проблемы:
Блок кода работает в дочернем потоке, когда поток завершается надо обновить значение ui компонента.
Значение компонента меняется, но ui виджет не перерисовывается в моменте. И что бы он перерисовался нужно тыкнуть на любой элемент реализующий слушатель, вообще пофиг какой главное что бы у него был addClickListener
@Push
public class WindowCreateLK extends Composite<Div>{
WindowCreateLK mainView;
TextField tfDataFromServer;
public WindowCreateLK(){
this.mainView = this;
//Этот виджет надо обновить из дочернего потока
tfDataFromServer = new TextField("empty");
Button someButton1 = new Button("Some button2");
someButton1.addClickListener(e->{
});
Button someButton2 = new Button("Some button2");
someButton2.addClickListener(e->{
});
getContent().add(tfDataFromServer,someButton1,someButton2);
//My Thread
MyCustomThread myThread = new MyCustomThread(UI.getCurrent(),context);
myThread.start();
}
//inner class
private static class MyCustomThread extends Thread {
private final UI ui;
private final WindowCreateLK mainView;
private int count = 0;
public MyCustomThread(UI ui, WindowCreateLK mainView) {
this.ui = ui;
this.mainView = mainView;
}
@Override
public void run() {
try {
// Update the data for a while
while (count < 10) {
Thread.sleep(500);
System.out.println(count);
count++;
}
// Inform that we are done
ui.access(() -> {
ui.access(() -> mainView.tfDataFromServer.setValue("SomeData"));
ui.push();
//But for view changes, i need click on some component with listener(like button or tab)
});
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}