如何在GWT中以正确的方式使用"Scheduler.get().scheduleDeferred"?



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

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

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

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

但它无法正常工作,因为它没有显示 loadLabel,而是立即显示 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);
      }
    }

使用具有"固定延迟"的调度程序,该调度程序将每 100 毫秒检查一次文本内容的加载。加载文本后,隐藏您的"加载标签"并显示"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();
}

相关内容

  • 没有找到相关文章

最新更新