2016-03-22 46 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中完成處理。