NullPointerException bei Hashtable

Kann mir jemand bitte erklären weshalb ich eine NullPointerException in der Zeile:

 hash.put(mlm.getFileAt(idx), emotionBox.getSelectedItem());

Die Zwei Werte sind sicher nicht null, es muss an der Hashtable liegen, kann mir aber nicht erklären weshalb.
bei folgendem Code:

public Hashdemo(){
Hashtable hash = new Hashtable();
}

 public void actionPerformed(ActionEvent e){
 index = playlist.getSelectedIndex();
 if (label.equals("hash")) {
 hash.put(mlm.getFileAt(idx), emotionBox.getSelectedItem());
}
}

Danke schon mal…
Grüße

hi

also, ohne vollständigem code kann man nur sagen, dass deine zeile 3 mögliche quellen für eine nullpointerexception hat.

probiere einfach mal folgenden code:

Object a = null;
Object b = null;

if (mlm != null) {
 a = mlm.getFileAt(idx);
} else {
 System.out.println("mlm ist null!");
}

if (emotionBox != null) {
 b = emotionBox.getSelectedItem();
} else {
 System.out.println("emotionBox ist null!");
}

if (hash != null) {
 hash.put(a,b);
} else {
 System.out.println("hash ist null!");
}

schau dir dann das ergebnis an. was genau ist da nun null?

aber wie gesagt, ohne den vollständigen code wird niemand genau sagen können, warum du da mit einer variable arbeitest, in die noch keine objektreferenz geschrieben wurde.

lg
erwin

Hi
eine weitere Variante ist, dass die Nullpointerexception z.B. beim berechnen der Hashwerte geworfen wird.

Also zusätzlich noch:
Fehlermeldung inklusive vollständigem Callstack;
Code der im Callstack referenzierten Methoden.

Danke, hab mein Fehler schon gefunden :smile:
Hashtable wurde nur lokal im Konstruktor referenziert…
Aber jetzt habe ich das Problem, dass meine Hashtable keine doppelten Einträge erkennt. Müsste es nicht so funktionieren.

if (hash.contains(mlm.getFileAt(idx))){
 System.out.println("Soundfile already exists in hash");
 hash.remove(mlm.getFileAt(idx));
 hash.put(mlm.getFileAt(idx), emotionBox.getSelectedItem());
 } 
 else {
 hash.put(mlm.getFileAt(idx), emotionBox.getSelectedItem());
 System.out.println("hash bekommt den eintrag mlm,label");
 }

Es wird immer nur die else Anweisung genommen, selbst wenn das Objekt schon drin ist.
Danke!

Ohh, ist bissl was mit der Antwortreihenfolge durcheinander gekommen. Also nochmal:

Danke, hab mein Fehler schon gefunden :smile:
Hashtable wurde nur lokal im Konstruktor referenziert…
Aber jetzt habe ich das Problem, dass meine Hashtable keine doppelten Einträge erkennt. Müsste es nicht so funktionieren.

if (hash.contains(mlm.getFileAt(idx))){
 System.out.println("Soundfile already exists in hash");
 hash.remove(mlm.getFileAt(idx));
 hash.put(mlm.getFileAt(idx), emotionBox.getSelectedItem());
 } 
 else {
 hash.put(mlm.getFileAt(idx), emotionBox.getSelectedItem());
 System.out.println("hash bekommt den eintrag mlm,label");
 }

Es wird immer nur die else Anweisung genommen, selbst wenn das Objekt schon drin ist.
Danke!

Ich habs, contains ist die falsche Methode. Es muss containsKey heißen :wink:
Trotzdem danke!