Hallo,
folgendes Problem, ich möchte einen Wert aus einer HashMap, mit einem Wert aus einer ComboBox auf Gleichheit prüfen. Solange das Ganze der Bedingung bei if entspricht, funktioniert es auch. Ist dies allerdings nicht der Fall und es geht somit weiter zu else if, erscheint eine Exzeption, dass der Wert der ComboBox null ist.
In beiden Fällen, sind die Bedingungen soweit identisch, nur ist bei der zuerst genannten noch ein if auf höherer Ebene vor, welches durchlaufen werden muss.
Dazu sei noch gesagt, dass sobald if erfolgreich durchlaufen worden war und man die Methode erneut anstößt, auch der Teil bei else if funktioniert.
Wäre klasse, wenn dort jemand eine Antwort drauf hätte =).
Java:
publicvoid entryToArray (){String tempColorAndText;System.out.println("0");for(String key :User.getUsersHashMap().keySet()){if(this.getColorsBox().getValue().equals("green")){
tempColorAndText ="#v";System.out.println("1")if(key.equals(this.getUsersBox().getValue())){// <= funktioniert von Anfang anSystem.out.println(this.getUsersBox().getValue()+" 2");((LinkedList<String>)User.getUsersHashMap().get(key).getEntry()[Date.indexOf(this.getEntryDate())]).add(tempColorAndText +this.getEntryTF().getText());}}elseif(key.equals(this.getUsersBox().getValue()){// <= schmeißt Exzeption System.out.println(this.getUsersBox().getValue()+" 3");((LinkedList<String>)User.getUsersHashMap().get(key).getEntry()[Date.indexOf(this.getEntryDate())]).add(this.getEntryTF().getText());}else{System.out.println("4");}}}
Aus den Code lässt sich erst einmal aus meiner Sicht nichts ablesen. Wenn die NPE kommt, weil getUserBox() null zurück gibt, dann musst du da schauen, was da Sache ist ... Wir sehen es ja nicht ...
Maximal der Hinweis sei mir gestattet, dass dein Code extrem unleserlich ist...
In der HashMap sind die "User" (die Instanzen einer eigenen Klasse) gespeichert, welche sich aus der jeweils erstellten Instanz, sowie dem dazu gehörenden Namen, welcher in einem Attribut gespeichert ist, hinterlegt. Unter dem Key sind die Namen aus dem Attribut gespeichert, welche mit dem ausgewählten Item aus der ComboBox abgeglichen werden sollen (UsersBox). Die Schleife soll die einzelnen Items in der HashMap durchgehen, bis der richtige bei ist und mit dem in der ComboBox überein stimmt.
Eine Map habe ich, da ich nicht den Namen aus dem Attribut benötige, welcher abgeglichen wird, sondern den Wergebenen Namen der Instanz, da ich darauf zugreifen muss.
Die Lösung ist nun, dass ich in der ersten if-Abfrage noch einen Vergleich mit null gesetzt habe.
Vielleicht hat jemand dort eine Begründung für, denn es funktioniert zwar so, aber erklären kann ich es mir momentan noch nicht.
Ja, dann stimmte einfach der angegebene Ort der Exception nicht und die Exception ist an der Stelle geflogen. Wenn getValue() null ist, dann wirft der equals Aufruf natürlich eine NPE!
Evtl. kann es da auch Sinn machen, das zukünftig einfach umzustellen.
1. Möglichkeit: Der Part, der nicht null sein kann, kommt an den Anfang:
"green".equals(....)
2. Möglichkeit: Objects.equals nutzen:
Objects.equals("green", ....);
oder
Objects.equals(..., "green");
Das macht den Code dann etwas einfacher als die Prüfung auf null. Aber generell gilt: Immer gut aufpassen, wo etwas null sein kann und dies abfragen / kontrollieren!
Du solltest dir vielleicht auch mal den Ablauf der Schlife anschauen (tatsächlich müsstest du komplett ohne Schleife auskommen können).
Du vergleichst so oft mit "green", wie die Map Einträge hat. Dann vergleichst du auch noch mit dem Key der Map und holst dann erst den passenden Wert raus.
Wie wär's wenn du so oder so ähnlich vorgehst ...
Java:
String selectedKey =getColorsBox().getSelectedValue()//1. zuallererst mal null ausschließenif(selectedKey ==null){//so something really important here//2. Spezialfallbehandlung(en), warum auch immer}elseif("green".equals(selectedKey)){//...//3. Auswerten des Map-Eintrags}else{WhatevertheEntryTypeIs mapValue = ser.getUsersHashMap().get(selectedKey);if(mapValue !=null){//Auswertung von Date oder was auch immer du im Code gemacht hast.}}
(Tippfehler meinerseits unterliegen dem Urheberrecht und dürfen weder kopiert noch beanstandet werden)
ps: Noch ein Letztes. Du kannst in einer Combobox auch was anderes als String speichern. Mit Strings kriegst du im Normalfall irgendwann Probleme mit der Groß-/Kleinschreibung, spätestens, wenn du mit einem Set oder einer Map arbeitest.