我尝试在UI上获得分数,每秒刷新几次。刷新不应该阻止UI的其他元素工作(按钮应该保持可点击等)。
我在EDT
上阅读了文档,并尝试添加从Form
的构造函数调用的方法:
private void loopScore() {
Display.getInstance().callSerially(
() -> {
while (true) {
try {
MyApplication.score = MyApplication.score + 1;
this.gui_Score.setText(String.valueOf(MyApplication.score));
Thread.sleep(100);
} catch (InterruptedException ex) {
//do something
}
}
});
}
但是这不会更新gui_Score
并且它会阻止UI的其余部分。帮助
答案 0 :(得分:1)
解决方案是覆盖animate
的{{1}}方法。
在Form
的每个新周期(大约每毫秒左右)调用此方法,以验证是否需要重新绘制任何内容。
覆盖该方法允许插入一行代码,更新分数为EDT
的文本:
Label
然后,您需要使用@Override
public boolean animate() {
if (System.currentTimeMillis() / 1000 > lastRenderedTime / 1000) {
lastRenderedTime = System.currentTimeMillis();
computeScore();
this.gui_Score.setText(String.valueOf(MyApplication.score));
return true;
}
return false;
}
private void computeScore() {
MyApplication.score = MyApplication.score + 3;
}
方法注册此动画。我是从registerAnimated
:
Form
现在带有计数器的public Form1(com.codename1.ui.util.Resources resourceObjectInstance) {
initGuiBuilderComponents(resourceObjectInstance);
lastRenderedTime = System.currentTimeMillis();
registerAnimated(this);
}
每秒刷新一次,显示增量为3.其余的UI保持响应,没有任何阻塞。
(通过摆弄时钟动画demonstrated on this page找到解决方案)