我需要等到给定的布尔值为真。该布尔值由侦听器更新。所有代码都在 EDT 中,因此以下内容不适用:
while (!myBoolean) {
Util.sleep(100);
}
如何停止 EDT 内的执行流(以正确的方式(,直到给定的布尔值变为真?
简单的答案是:
invokeAndBlock(() -> {
while (!myBoolean) {
Util.sleep(100);
}
});
更好的方法是:
timer = UITimer.schedule(100, true, () -> {
if(myBoolean) {
timer.cancel();
runThisMethod();
}
});
一个更复杂的问题是"为什么不添加一个侦听器"?
既然布尔值是从侦听器更改的,为什么不在触发它的侦听器之后添加一个侦听器并在那里做工作呢?