【问题标题】:How check Boolean value until it is true [duplicate]如何检查布尔值直到它为真[重复]
【发布时间】:2017-06-20 18:05:24
【问题描述】:

我是 java 新手,想知道如何仅在布尔值为真时执行某些操作。

注意:我需要检查几次。

我使用这种方法,但我想知道另一种方法:

private void Check() {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            if (boolean) {
                //Do Something...
            } else {
                Check();
            }
         }
    }, 10);
}

【问题讨论】:

  • 您可以使用 CountdownLatch 吗?什么代码设置布尔变量的值?您需要无限期地检查还是只检查几次?等
  • 这就是教程的好处...
  • 如果你想重复检查条件,那么你需要一个forwhile循环。
  • 检查这个answer!!有很多方法可以做到这一点。
  • 改变布尔值的代码是你程序的一部分吗?

标签: java android


【解决方案1】:

试试这个:

while(!aBoolean); //mind the semicolon.
//do something

但这会占用更多的 CPU。你可能想把它放在线程和睡眠线程中一段时间​​。

new Thread(new Runnable() {
    public void run() {
        while (!aBoolean) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException ignored) {
            }
        }
        //do something
    }
}).start();

【讨论】:

    【解决方案2】:

    您可以使用javafx.beans.property.SimpleBooleanProperty 代替boolean。那你就可以了

    import javafx.beans.property.SimpleBooleanProperty;
    
    //status is a SimpleBooleanProperty
    SimpleBooleanProperty status = new SimpleBooleanProperty(false);
    
    status.addListener(new ChangeListener<Boolean>() {
            @Override
            public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
                if (newValue) {
                    //do something
                }
            }
        });
    

    Check 变得毫无意义,因为 changed(...) 函数只会在值更改时被调用。

    这也不会一直创建新的Runnables

    缺点是,status = true 变成 status.set(true)if (status) 变成 if (status.get()),你必须在任何地方进行更改。

    【讨论】:

      猜你喜欢
      • 2023-01-12
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 2021-11-14
      • 2019-08-07
      • 2021-06-17
      • 2020-01-19
      相关资源
      最近更新 更多