4
在某些情況下,我想在長時間運行的查詢時向用戶顯示帶有進度條的模態窗口。 (對於個別UI項目,我使用的方法setEnabled (true/ false)
但我想更完美的解決方案。)用於長時間任務的進度條的模態窗口
例如,在入口點,直到沒有初始化所有元素 -
public void onModuleLoad() {
// initialization of the interface here
}
而且還舉例說,完成從屬列表框(關係一對多)
@UiHandler("listBox")
public void onListBoxChange(ChangeEvent event) {
someService.findDependencies(id, new AsyncCallback<List<DependencyDTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<DependencyDTO> data) {
// listBox filling here
}
});
}
當在Vaadin應用我可以加入到聽者下面的代碼,例如 -
...
Thread thread = new Thread() {
@Override
public void run() {
// some initialization here
window.removeWindow(blockerWindow);
}
};
thread.start();
blockerWindow = new BlockerWindow();
window.addWindow(blockerWindow);
...
在我的情況,我可以用下面的方法來顯示一個進度條的窗口 -
private void freezeInterface() {
blockerWindow = new BlockerWindow()
blockerWindow.setGlassEnabled(true);
blockerWindow.setAnimationEnabled(true);
blockerWindow.setModal(true);
blockerWindow.center();
blockerWindow.show();
}
而且方法來隱藏窗口 -
private void unfreezeInterface() {
blockerWindow.hide();
}
的問題是,當隱藏窗口。
例如,在入口點有疑問的系列 -
...
service1.findDependenciesForListBox1(id1, new AsyncCallback<List<Dependency1DTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<Dependency1DTO> data) {
// listBox1 filling here
}
});
service2.findDependenciesForListBox2(id2, new AsyncCallback<List<Dependency2DTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<Dependency2DTO> data) {
// listBox2 filling here
}
});
serviceN.findDependenciesForListBoxN(idN, new AsyncCallback<List<DependencyNDTO>>() {
public void onFailure(Throwable caught) {
// exception handling here
}
public void onSuccess(List<DependencyNDTO> data) {
// listBoxN filling here
}
});
等。
答案以先前未知的順序出現,並將窗口隱藏在我不能使用的方法之一onSuccess
中。
我可以使用一個timer
,但我不知道在schedule
通過的時間。如何在GWT
中正確實施?
謝謝你爲你的答案! –