Codenameone 关于Codename One UITimer如何工作的澄清
我需要一个关于代码名OneCodenameone 关于Codename One UITimer如何工作的澄清,codenameone,Codenameone,我需要一个关于代码名OneUITimer的澄清 例如,如果我希望每两秒钟执行一次相同的代码,则类似于UITimer.timer(2000,true,()->{do something;})的代码一直工作,直到用户停留在当前的表单中?是这样吗 如果我想每两秒钟执行一次相同的代码而不考虑所显示的表单,我是否需要使用与UITimer不同的东西,比如自定义的独立线程?例如下面的代码 Form hi = new Form("Hi World", BoxLayout.y()); hi.add
UITimer
的澄清
例如,如果我希望每两秒钟执行一次相同的代码,则类似于UITimer.timer(2000,true,()->{do something;})的代码代码>一直工作,直到用户停留在当前的表单中
?是这样吗
如果我想每两秒钟执行一次相同的代码而不考虑所显示的表单
,我是否需要使用与UITimer
不同的东西,比如自定义的独立线程?例如下面的代码
Form hi = new Form("Hi World", BoxLayout.y());
hi.add(new Label("Hi World"));
hi.show();
EasyThread.start("MyTimer").run(() -> {
boolean executeMe = true;
while (executeMe) {
Log.p("Do something every two seconds...");
try {
Thread.sleep(2000);
} catch (InterruptedException ex) {
Log.p("Stopping the EasyThread \"MyTimer\" because an exception");
Log.e(ex);
executeMe = false;
}
}
});
此外,如果执行此示例代码,则记录的第一行是:
[MyTimer]0:0:0,59-代号一修订版:8b451ecb7bfbe60baf91006441e7d7d9c46afe09
为什么该行由我的自定义线程而不是EDT记录?是的,UITimer
是与当前表单相关联的动画。它不绘制任何东西,而是使用在EDT上运行的内置动画机制。请注意,如果您离开表单并返回表单,计时器将继续运行,例如:
- 在0时间打开窗体,并设置计时器15秒
- 在7秒时变成了另一种形式
- 30秒后返回至原始状态-返回时计时器将立即启动
您还可以使用常规的计时器
或线程
。但是,对于您的特定代码,EasyThread
与常规线程相比并没有什么好处,因为它在无限循环中运行。EasyThread
的好处在于它的作业处理能力
请注意,在使用此类计时器/线程时,需要使用callSerially
返回EDT