2017-06-20 5 views
1

私はjavaで新しく、ブール値がtrueのときに何かを実行する方法を知りたがっています。真になるまでブール値をチェックする方法

注:私は何度かチェックが必要です。

私はこの方法を使用するが、私は別の方法を知りたいと思った:

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

おそらくCountdownLatchを使用できますか?どのコードがブール変数の値を設定しますか?無期限にチェックするか、何回かチェックする必要がありますか? – assylias

+0

これはチュートリアルが良いものです... – Piglet

+0

条件を繰り返し確認したい場合は、 'for'や' while'ループが必要です。 –

答えて

2

はこれを試してみてください:

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(); 
0
I would suggest that you do: 
//here status is a boolean variable  

if (status) { 
    //positive work`enter code here` 
} else { 
    // negative work 
} 
+0

質問者が変更のブール値を継続的に監視したいので、これは問題に答えるようではありません。 – Jon

1

私はあなたがこのanswerで見てみ勧め!あなたは多くの方法でこれを行うことができます。

0

booleanの代わりにjavafx.beans.property.SimpleBooleanPropertyを使用できます。そして、あなたはchanged(...) -functionのみ呼び出されますので

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 
      } 
     } 
    }); 

チェックが無意味になり、値の変更を行うことができます。

また、これは常に新しいRunnablesを作成しません。

欠点は、status = truestatus.set(true)になり、if (status)if (status.get())になります。これはどこでも変更する必要があります。

関連する問題