首页 > 解决方案 > 代号一:等到给定的布尔值为真

问题描述

我需要等到给定的布尔值为真。该布尔值由侦听器更新。所有代码都在 EDT 中,因此以下内容不适用:

while (!myBoolean) {
    Util.sleep(100);
}

如何停止 EDT 内的执行流程(以正确的方式),直到给定的布尔值变为真?

标签: codenameone

解决方案


简单的答案是:

invokeAndBlock(() -> {
    while (!myBoolean) {
       Util.sleep(100);
    }
});

更好的方法是:

timer = UITimer.schedule(100, true, () -> {
   if(myBoolean) {
      timer.cancel();
      runThisMethod();
   }
});

一个更复杂的问题是“为什么不添加监听器”?

由于布尔值是从侦听器更改的,为什么不在触发它的侦听器之后添加侦听器并在那里完成工作呢?


推荐阅读