这是我的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();
}