Vaadin popup应该在click事件中显示和隐藏不会出现弹出窗口

时间:2014-02-19 14:30:50

标签: java popup vaadin show-hide

有一个

  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,并没有找到更好的解决方案。任何解决方案/描述为什么弹出窗口没有显示我会很感激

2 个答案:

答案 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");

由于这个原因,您可以将耗时的操作转移到另一个类,从而将业务逻辑与表示层分离。您可以在上面的链接中找到使用示例。