GWT,如何正确制作装载标签?

GWT,如何正确制作装载标签?,gwt,loading,visible,Gwt,Loading,Visible,我得到了一个复杂的循环,可能需要1或2秒才能显示结果,所以我想做一个指示,告诉用户等待程序完成处理,所以我做了一个标签(“…加载…”)&在程序开始时将visible设置为false&在执行循环之前将visible显示为true,然后在循环完成后将visible设置为false Label-loadingLabel=新标签(“…加载…”); public void onBind(){ loadingLabel.setVisible(假); } 公共作废一次点击(点击事件){ loadingLabe

我得到了一个复杂的循环,可能需要1或2秒才能显示结果,所以我想做一个指示,告诉用户等待程序完成处理,所以我做了一个标签(“…加载…”)&在程序开始时将visible设置为false&在执行循环之前将visible显示为true,然后在循环完成后将visible设置为false

Label-loadingLabel=新标签(“…加载…”);
public void onBind(){
loadingLabel.setVisible(假);
}
公共作废一次点击(点击事件){
loadingLabel.setVisible(true);
//这里有很多圈
loadingLabel.setVisible(假);
}

但是在运行之后,我没有看到标签。那么,怎样才能使加载标签正确显示呢。

首先,检查您是否正在将
标签添加到UI中,也许您没有发布代码的这一部分,但显然它应该在
onBind

其次,
//这里有很多循环
是同步的还是异步的?。如果是异步的,则必须在回调函数的末尾隐藏标签

通常我更喜欢使用
EventBus
,当一个大进程启动时(要么是一个同步循环,要么是一个异步调用链),我调用
EventBus.fire(…)
,然后当最后一件事完成时,我再次调用
EventBus.fire(…)

Label loadingLabel=新标签(“”);
RootPanel.get().add(loadingLabel);
loadingLabel.setVisible(false)
addHandler(LoadingEvent.TYPE,新的LoadingEvent.Handler(){
公共无效onRequestEvent(加载事件ev){
if(ev.getMessage()==null){
loadingLabel.setVisible(假);
}否则{
加载label.setText(ev.getMessage());
loadingLabel.setVisible(true);
}
}
});
//显示标签并显示自定义消息
eventBus.fire(新加载事件(“消息”))
//这里有很多圈
//隐藏标签
eventBus.fire(新加载事件(null))

当然,使用这种方法,您可以拥有一个更复杂的加载小部件。

我认为您需要在循环中显示一些进展。Javascript只有一个线程。所以你不能这样做。您必须使用某种机制分割javascript的执行。你可以用它

Scheduler.get().scheduleIncremental(new RepeatingCommand() {
                @Override
                public boolean execute() {

if(somecodtion)
{
loadingLabel.setVisible(true);
return false;
}
else
{
 loadingLabel.setVisible(false);
return true;
}
}