1

这是我的 GWT 应用程序中的伪代码。

- 可见加载标签
- 从属性文件加载文本(可能需要很长时间)
- 不可见加载标签 & 可见主 HTMLPanel

所以我想用它Scheduler.get().scheduleDeferred来实现,这里是代码:

loadingLabel.setVisible(true);
Scheduler.get().scheduleDeferred(new ScheduledCommand() { 
  @Override
  public void execute() {
   loadingText();
  }
}
loadingLabel.setVisible(false);
mainHTMLPanel.setVisible(true);

但它不能正常工作,因为它没有显示 loadingLabel 而是立即显示 mainHTMLPanel 并且当我单击 mainHTMLPanel 内的文本框时,因为 Gui 被冻结了,因为它正在加载文本。然后我必须等待一段时间才能单击 mainHTMLPanel 中的文本框。

但是如果我把loadingLabel.setVisible(false);&mainHTMLPanel.setVisible(true);放在里面,execute()那么它就可以工作了。

但我不确定这是正确的做法。

那么,下面的代码是正确的使用方式Scheduler.get().scheduleDeferred吗?

    loadingLabel.setVisible(true);
    Scheduler.get().scheduleDeferred(new ScheduledCommand() { 
      @Override
      public void execute() {
       loadingText();
       loadingLabel.setVisible(false);
       mainHTMLPanel.setVisible(true);
      }
    }
4

1 回答 1

0

使用具有“固定延迟”的调度程序,每 100 毫秒检查一次文本内容的加载情况。加载文本后,隐藏您的“loadingLabel”并显示“mainHTMLPanel”。

mainHTMLPanel.setVisible(false);
loadingLabel.setVisible(true);

Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() {
   @Override
   public boolean execute() {
       if (isTextLoaded())  {
            loadingLabel.setVisible(false);
            mainHTMLPanel.setVisible(true);
            return false;
       }
       else {return true;}
    }
}, 100);

private boolean isTextLoaded() {
    // Dummy check
    MyWidgetContainingText.getContent().isNotEmpty();
}
于 2013-10-29T07:55:35.073 回答