codenameone - 代号一:等到给定的布尔值为真
问题描述
我需要等到给定的布尔值为真。该布尔值由侦听器更新。所有代码都在 EDT 中,因此以下内容不适用:
while (!myBoolean) {
Util.sleep(100);
}
如何停止 EDT 内的执行流程(以正确的方式),直到给定的布尔值变为真?
解决方案
简单的答案是:
invokeAndBlock(() -> {
while (!myBoolean) {
Util.sleep(100);
}
});
更好的方法是:
timer = UITimer.schedule(100, true, () -> {
if(myBoolean) {
timer.cancel();
runThisMethod();
}
});
一个更复杂的问题是“为什么不添加监听器”?
由于布尔值是从侦听器更改的,为什么不在触发它的侦听器之后添加侦听器并在那里完成工作呢?
推荐阅读
- r - dyplr + 数据集 + 百分位数
- vue.js - Bootstrap-vue 组件(下拉菜单)似乎已呈现但在页面上不可见
- javascript - 有没有办法让每个 NW.js 驱动的应用程序都拥有 261+ MB 的“虚拟数据”?
- css - DomPDF & html 页眉/页脚显示和隐藏
- swift - 在 Swift 中,如果我有一个捕获 [weak self] 的闭包,那么在闭包开始时解开可选的 self 是一种好习惯吗?
- perl - Perl如何查看所有字段
- python - 用逗号替换空格,除了行尾python
- tensorflow - 用于回归张量流的 3D 张量,目标值也是 3D 张量
- android - 在 Android 11 setMediaSession on Notification 然后调用 stopSelf 不会触发 MediaBrowserServiceCompat 中的 onDestroy
- mysql - 如何使用 PDO 获取行数?