2017-08-12 9 views
-1

javafx runlaterスレッドのゲージが値を割り当ててNullPointerExceptionを回避するように作成する必要があります。私はrunlaterスレッドが終了するまで通常のスレッドをスリープさせる複数のifステートメントを作成しました。これは、別のスレッドで作成されるためです。ネストされたif文が2回以上実行されない

私の問題は、プログラムが最初のif文と2番目のif文だけを入力し、残りの部分は無視して値を割り当てるときにNullPointerExceptionが発生することです。

if (TDSgauge == null || TDNgauge == null) { 

      t1.sleep(500); 
      System.out.println("in 1 ------------------------------------------------------------------------"); 
      if (TDSgauge == null) { 
       t1.sleep(500); 
       System.out.println("in 2 ------------------------------------------------------------------------"); 
      } 
      if (TDNgauge == null) { 
        t1.sleep(500); 
        System.out.println("in 3 ------------------------------------------------------------------------"); 
      }if (TDSgauge == null) { 
         t1.sleep(500); 
         System.out.println("in 4 ------------------------------------------------------------------------"); 
      }if (TDSgauge == null || TDNgauge == null) { 
          t1.sleep(500); 
      System.out.println("in 5 ------------------------------------------------------------------------"); 
      } 
     } 

ゲージの作成には長いコードが使用されているため、ゲージの作成を開始するときに可能です。ゲージがヌルにならない?

+0

私は有益な回答を得ようとしましたが、正しい指導をするためには本当の[mcve]が必要だと感じました。 – GhostCat

+0

それを超えて、少しのフィードバックが歓迎されるでしょう。または、単に答えの1つを受け入れます。 – GhostCat

答えて

2

誤ったアプローチ。

まず、このようなコードを複製しないでください。5つのネストされたif文を書き留めません。すべての場合 - このチェックを行う回数だけ実行されるループを使用します。

しかし、それはまだハックです。通常、wait()/ notify()を使用します。意味:待機中のスレッドがある時点で通知を受け取るように、Javaのビルトインシグナリングメカニズムを使用します。待機する条件が満たされたときに待機部分が肩のタップを得るように道を作ります。

一方、メインイベントディスパッチャスレッドではスリープ/ウェイトしたくないということは絶対にありません。したがって、より良いアドバイスのためにコードをもっと表示する必要があります。

+0

正しい。私はさらにその部分を更新しました。 – GhostCat

関連する問題