Guten Abend allerseits
Ich bekomme hier eine höchst verwirrende NPE. Im Bild ist ein Debuggerscreenshot mitsamt dem Inhalt aller aktuell gültiger Variablen.
Die Klasse, in der der Fehler auftritt, ist die Klasse
Typische Beispiele (Name - Wert):
-Bauteilwert - 10Ω
-Dokumentpfad - C:\Pfad\zum\Datenblatt.pdf
-...
Alle Property-Objekte werden in einer
Wie man unten in den Variablen sehen kann, ist
Soweit ist alles, wie es sein soll. Jedoch:
Der Methodenparameter
Jetzt frag ich mich nur: Warum kommt da null zurück? Ich habe den Ausdruck ja im Debugger nochmal eingegeben - da wird null bestätigt. Aber in der Variablenansicht sieht man ja, daß da nicht null zurückkommen sollte. Und der Vergleich mit
Noch etwas zum Umstand des Aufrufes: Das Component-Objekt ist vorher von meiner ObjectProcessorklasse deserialisiert worden. Ich habe daraufhin mal einen Test geschrieben mit einer HashMap in einer HashMap und Enumeration als Key. Dieser Test lief erfolgreich. Und im Debugger sieht ja sonst auch alles gut aus.
Die Zeile, in der ich angehalten habe, ist die Wurzel allen Übels im Stacktrace, die NPE kommt also nicht von einem höheren/unteren Methodenaufruf.
Hat jemand eine Idee?
Ich bekomme hier eine höchst verwirrende NPE. Im Bild ist ein Debuggerscreenshot mitsamt dem Inhalt aller aktuell gültiger Variablen.
Die Klasse, in der der Fehler auftritt, ist die Klasse
Component
. Sie soll alle Eigenschaften, die ein Bauteil haben kann, halten. Es gibt zwei Sorten von Eigenschaften: temporäre und persistente. Die Methode, die im Screenshot zu sehen ist, soll eine HashMap<String, String>
zurückliefern wobei 'Key' der Name und 'Value' der Wert der Eigenschaft ist, Art der Eigenschaften (also temporär oder persistent) werden mit einem Parameter PropertyScope scope
ausgewählt. Es geht hier speziell um elektronische Bauteile.Typische Beispiele (Name - Wert):
-Bauteilwert - 10Ω
-Dokumentpfad - C:\Pfad\zum\Datenblatt.pdf
-...
Alle Property-Objekte werden in einer
private HashMap<PropertyScope, HashMap<String, ComponentProperty>> properties;
gehalten. In der Methode, in der die NPE geworfen wird und die im Screenshot zu sehen ist, soll zunächst mit PropertyScope scope
die gewünschten Eigenschaften ausgewählt werden - und hier tritt der Fehler auf (grün markierte Zeile).Wie man unten in den Variablen sehen kann, ist
properties
nicht null. Die HashMap existiert und enthält zwei Einträge, je einen für PropertyScope.TEMPORARY
und für PropertyScope.PERSISTENT
. Einträge für temporäre Eigenschaften gibt es nicht (aber auch dort ist nix null, dort ist lediglich eine leere HashMap), der Eintrag für persistente Eigenschaften ist jedoch nicht leer, dort gibt es was.Soweit ist alles, wie es sein soll. Jedoch:
Der Methodenparameter
PropertyScope scope
enthält als Wert PropertyScope.PERSISTENT
. Folglich müßte ich in Zeile 243 eine HashMap<String, ComponentProperty> scopeFilteredProperties
erhalten. Eine HashMap mit sechs Einträgen. Stattdessen liefert der Ausdruck properties.get(scope)
in Zeile 243 null zurück, so daß es beim ersten Aufruf der for-each-Schleife zu einer NPE kommt.Jetzt frag ich mich nur: Warum kommt da null zurück? Ich habe den Ausdruck ja im Debugger nochmal eingegeben - da wird null bestätigt. Aber in der Variablenansicht sieht man ja, daß da nicht null zurückkommen sollte. Und der Vergleich mit
scope.equals(PropertyScope.PERSISTENT)
liefert ja auch true zurück.Noch etwas zum Umstand des Aufrufes: Das Component-Objekt ist vorher von meiner ObjectProcessorklasse deserialisiert worden. Ich habe daraufhin mal einen Test geschrieben mit einer HashMap in einer HashMap und Enumeration als Key. Dieser Test lief erfolgreich. Und im Debugger sieht ja sonst auch alles gut aus.
Die Zeile, in der ich angehalten habe, ist die Wurzel allen Übels im Stacktrace, die NPE kommt also nicht von einem höheren/unteren Methodenaufruf.
Hat jemand eine Idee?
Anhänge
Zuletzt bearbeitet von einem Moderator: