2017-08-12 2 views
-1

Ich habe eine Sättigung, wo ich sicherstellen muss, dass meine Messgeräte auf javafx runlater Thread erstellt werden, um einen Wert zuzuweisen und NullPointerException zu vermeiden. Also habe ich mehrere if-Anweisungen erstellt, die den normalen Thread zum Schlafen bringen, bis der Endthread beendet ist, weil der Text in einem anderen Thread erstellt wurde.Verschachtelt, wenn Anweisungen nicht weiter gehen als 2 mal

Mein Problem ist, dass Programm nur erste und zweite if-Anweisung eingibt und den Rest von ihnen ignoriert, die beim Zuweisen des Werts eine NullPointerException verursachen.

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

Gauge-Erstellung hat einen langen Code, ist es möglich, dass wenn Sie das Messgerät erstellen; Messgerät wird nicht null?

+0

Ich habe versucht, eine hilfreiche Antwort zu geben - aber ich habe das Gefühl, dass wir eine echte [mcve] brauchen würden, um die richtige Anleitung zu geben. – GhostCat

+0

Darüber hinaus - ein bisschen Feedback wäre willkommen. Oder Sie akzeptieren einfach eine der Antworten. – GhostCat

Antwort

2

Falsche Annäherung.

Zunächst einmal: Code nicht so duplizieren - schreibe nicht 5 verschachtelte if-Anweisungen auf. Wenn überhaupt - verwenden Sie eine Schleife, die für eine bestimmte Anzahl von Malen läuft, die diese Prüfung durchführt.

Aber das wäre immer noch ein Hack. Normalerweise würden Sie lieber wait()/notify() verwenden. Das heißt, Sie verwenden den eingebauten Signalmechanismus von Java, so dass der wartende Thread irgendwann benachrichtigt wird. Sie bauen einen Weg, so dass der wartende Teil einen Schulterklopfen bekommt, wenn die Bedingung erfüllt ist, auf die gewartet werden muss.

Auf der anderen Seite möchten Sie nicht unbedingt auf den Haupt-Event-Dispatcher-Thread warten. Sie müssten also mehr Code für besseren Rat zeigen.

+0

Korrekt. Ich habe diesen Teil weiter aktualisiert. – GhostCat

Verwandte Themen