2016-03-22 45 views
0

我是Vaadin的新手,可以使用一些帮助。等待子窗口输入时暂停程序

场景: 我的webapp有一个叫做“import”的按钮,当你点击它时,你可以选择一个文件来导入,然后打开一个显示进度的新窗口。在导入过程中,程序会读取文件的内容,并且在某些情况下,它需要来自用户的其他信息才能继续。在这种情况下,我想打开一个辅助窗口(用于输入的简单文本框和一个输入按钮),用户可以在其中输入缺失的信息。只有当用户点击输入按钮时,程序才会继续处理文件的导入。

我试过的东西: 我创建了一个扩展Window的类“ImportWindow”。 从这个类中,我调用名为“FileReader”的类中称为“handleFileContent()”的方法,该类读取文件的内容。 我用扩展Window创建了一个额外的类“AdditionalInfoPopUp”。 当“handleFileContent()”到达其中它需要更多的信息的文件的一部分,我有以下代码:

AdditionalInfoPopUp apwindow = new AdditionalInfoPopUp(); 
UI.getCurrent().addWindow(apwindow); 

while (!apwindow.isCompleted()){ 
    // wait for user input 
    try { 
     Thread.sleep(5000); 
    } catch(InterruptedException ex) { 
     Thread.currentThread().interrupt(); 
    } 
} 

“isCompleted()”是一个返回布尔值的方法,该余当新的AdditionalInfoPopUp中的输入按钮被点击时,设置为true。

问题: AdditionalInfoPopUp从不打开。如果我删除了while循环,那么当程序读取文件的其余部分时它会打开。但是我需要立即开放,所以我可以在继续之前获得辅助信息。

我试过寻找帮助,但我一直未能找到任何东西。所以我希望这里有人能帮忙。

+0

您需要先读取所有的uploadfile。然后,您可以添加您的逻辑来向用户询问更多信息。如果处理是在后台线程中完成的,请阅读 - > https://vaadin.com/wiki/-/wiki/Main/Using+server+initiated+events –

+0

谢谢,它使我走上了正确的轨道。我已经在buttonclicklistener中实现了它,但是我需要启动一个新线程,因为在buttonclicklistener完成之前窗口没有刷新。 现在有效。 – TSH

+0

@AndréSchild你可以发表回答? –

回答

0

您需要先读取所有的uploadfile。

然后,您可以添加您的逻辑,要求用户提供更多信息。

如果在后台线程read this中完成处理。