我需要澄清一个代号UITimer
。
例如,如果我想每两秒钟执行一次相同的代码,那么像UITimer.timer(2000, true, () -> { do something; });
这样的代码就可以起作用,直到用户停留在当前的Form
上为止?是吗?
如果我想每两秒钟执行一次相同的代码,不管显示的Form
,我是否可以使用与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 - Codename One revisions: 8b451ecb7bfbe60baf91006441e7d7d9c46afe09
为什么该行由我的自定义线程而不是EDT记录?
答案 0 :(得分:1)
是的,UITimer
是与当前Form
关联的动画。它没有画任何东西,只是使用了在EDT上运行的内置动画机制。请注意,如果您离开表格并返回表格,计时器将继续运行,例如:
您还可以使用常规的Timer
或Thread
。但是,由于您的特定代码EasyThread
在无限循环中运行,因此与常规线程相比,它没有任何好处。 EasyThread
的好处在于它的工作处理能力。
请注意,使用此类计时器/线程时,需要使用callSerially
返回EDT。