我每次点击按钮时都会尝试创建一个加载屏幕(在本例中为PopUp Panel),并在处理完成后隐藏屏幕。
但问题是加载屏幕永远不会出现。
如果我删除隐藏加载屏幕的行:
//HIDES THE LOADING POPUP
closeLoadingFilter();
出现加载屏幕,但只有一切都完成处理。 (点击按钮后不立即)。
我认为按钮处理程序中的所有处理必须在屏幕上出现任何内容之前完成。因此,当处理完成后,弹出窗口会在屏幕上显示之前隐藏。
我该如何解决这个问题。顺便说一句,在处理过程中没有异步调用,一切都是内存处理和谷歌可视化与内存信息的绘制
谢谢大家
以下是代码:
buttonFilter.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
//SHOWS THE LOADING POPUP
showLoadingFilter();
//ALL THIS TAKES AROUND 4 SECONDS
//THERE IS NO ASYNC CALL
//EVERYTHING IS IN-MEMORY PROCESSING
//AND DRAWING OF GOOGLE VISUALIZATION
listValues.clear();
listFields.clear();
CreateListFiltersSingle();
GetFilterSingleOptions();
RunFilter(dashboardProductos);
DrawVisualizations2();
//HIDES THE LOADING POPUP
closeLoadingFilter();
}
})
public void showLoadingFilter() {
popupFilterLoading.clear();
popupFilterLoading.add(new Label("Please wait"));
popupFilterLoading.setGlassEnabled(true);
popupFilterLoading.center();
isFilterLoading = true;
popupFilterLoading.show();
}
public void closeLoadingFilter() {
if (isFilterLoading) {
popupFilterLoading.hide();
isFilterLoading = false;
}
}
答案 0 :(得分:0)
您可以使用scheduler异步调用方法。下面的代码可能会解决您的问题。
submit.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
showLoadingFilter();
// Waits for the loading pop-up to be displayed before starting anything
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
listValues.clear();
listFields.clear();
CreateListFiltersSingle();
GetFilterSingleOptions();
RunFilter(dashboardProductos);
DrawVisualizations2();
closeLoadingFilter();
}
});
}