有一个
public void buttonClick(ClickEvent event) {
MyPopup popup = new MyPopup();
getWindow().addWindow(popup);
log.warn("Added POPUP");
//lot of method calling here then
getWindow().removeWindow(popup);
log.warn("Removed Popup");
}
我希望显示一个弹出窗口,经过一些小小的后续(在昂贵的方法调用之后),它应该隐藏自己。日志说:
2014-02-19 15:26:51 WARN xyzClass:82 - Added POPUP
2014-02-19 15:26:51 WARN xyzClass:135 - Removed Popup
但事实是这里没有弹出窗口。
如果我只显示它,而不是以后删除它(弹出窗口会显示) public void buttonClick(ClickEvent event){ MyPopup popup = new MyPopup(); getWindow()addWindow(弹出)。 log.warn(“添加POPUP”); //然后在这里调用很多方法 log.warn(“Removed Popup”); }
我的主要原因是我想要实现一个玻璃面板/加载屏幕功能@ Vaadin,并没有找到更好的解决方案。任何解决方案/描述为什么弹出窗口没有显示我会很感激
答案 0 :(得分:2)
没时间渲染它。您添加它并立即删除。 尝试这种方法,例如:
private MyPopup popup;
public void buttonClick(ClickEvent event) {
Thread workThread = new Thread() {
@Override
public void run() {
// some initialization here
getWindow().removeWindow(popup);
}
};
workThread.start();
popup = new MyPopup();
getWindow().addWindow(popup);
}
答案 1 :(得分:2)
根据Vaadin版本,您可以使用ICEPush插件(Vaadin 6)或称为Server Push的内置功能(Vaadin 7)。
public void buttonClick(ClickEvent event) {
MyPopup popup = new MyPopup();
getWindow().addWindow(popup);
log.warn("Added POPUP");
// start background thread with ICEPush or ServerPush
}
// Background thread in a separate class
// update UI accordingly when thread finished the job
getWindow().removeWindow(popup);
log.warn("Removed Popup");
由于这个原因,您可以将耗时的操作转移到另一个类,从而将业务逻辑与表示层分离。您可以在上面的链接中找到使用示例。