2012-03-28 10 views
-2

Ich habe diese rekursive Methode:NullPointerExceprion bei rekursiven Methode

public Hund getMor(int id) { 
    Hund barn = getHund(id); 
    int idMor = barn.getId_mor(); 
    Hund mor = getHund(idMor); 

    return mor; 
} 

public String getMorTre(int id) { 
    if (id == 0) { 
     return null; 
    } 
    if (!existHund(id)) { 
     return "Hunden du søkte etter finnes ikke"; 
    } else { 
     if (id == 0) { 
      return null; 
     } else { 
      Hund mor = getMor(id); 
      MinRamme.jta.append(mor.toString() + "\n"); 
      int morId = mor.getId(); 
      return getMorTre(morId); 
     } 

    } 
} 

Ich habe versucht, den Nullpointer durch Rückkehr null zu entfernen, wenn die ID 0, aber das funktioniert nicht. Hat jemand eine Lösung?

NPE:

Exception in thread "AWT-EventQueue -0" java.lang.nullpointerexception 
at Arkiv.getMorTre(Arkiv.java:209) 
at Arkiv.getMorTre(Arkiv.java:211) 
at Arkiv.getMorTre(Arkiv.java:211) 
at MinRamme$4.actionPerformed(MinRamme.java:89) <37 internal calls> 
+2

Bitte schließen Sie die Ausnahme ein. Welche Zeile gibt den Fehler? – Ishtar

+1

Auf welcher Linie erhalten Sie die NPE? – assylias

+1

Wir wissen nicht, was die Ausnahme auslöst. Bitte posten Sie ein kurzes, aber * vollständiges * Programm, das das Problem demonstriert. –

Antwort

3

Wo kommt der Nullpointer auftreten? Das würde helfen ... Dass gesagt wird:

In Ihrer else-Klausel, Ihre

if (id==0) { 

nutzlos ist, da Sie, dass am Anfang zu testen sind und die ID wird nicht verändert.

Ich glaube, Sie wenn

getMother(id) 

kehrt null überprüfen müssen, dass wahrscheinlich ist, wo Sie die Nullpointer sind immer ... aber man konnte das jetzt bestätigen, könnten Sie nicht?

+0

Danke, überprüft, ob die getMother (id) == null und es die NPE wegging! – Twistar

2

Es ist wahrscheinlich (aber schwer zu bestätigen, bis Sie uns wissen lassen, welche Linie die NPE wirft), dass die Linie, die die NPE erzeugt ist

MyFrame.jta.append(mother.toString() + "\n"); 

weil Mutter null ist. Sie könnten Ihren Code in das ändern:

Dog mother = getMother(id); 
if (mother == null) { 
    //do something 
} 
-1

Sein, weil Ihre Ausnahme bei mother.toString() Methode ist ..

versuchen, diese

try 
{ 
MyFrame.jta.append(mother.toString() + "\n"); 
}catch(NullPointerException ignore){} 
+0

Es ist besser, "if (mother! = Null)" zu überprüfen, anstatt die Ausnahme zu erfassen und zu ignorieren. Leistung, Lesbarkeit, ... – surfen

1

Es gibt wirklich nicht genug Informationen hier. In welcher Zeile bekommen Sie den Nullzeiger?

wenn, wie ich vermute, es ist hier:

MyFrame.jta.append(mother.toString() + "\n"); 

Dann brauchen Sie, durch das Debuggen, um festzustellen, dass es auf jeden Fall Mutter ist, die null ist. Wenn Sie das getan haben, dann können Sie absolut positiv sein, dass Ihre getMother (id); Gibt null zurück, für die ID, die Sie übergeben.

Wenn ich Sie wäre, würde ich einen Komponententest für die GetMother (ID) -Methode erstellen und die ID übergeben, die den Fehler verursacht.

Wenn Sie nicht wissen, welcher ID-Wert das Problem verursacht, sollten Sie zumindest eine System.out.print() -Anweisung einstecken, um herauszufinden, was vor sich geht. Allerdings sollten Sie ein Logging-Framework wie log4j verwenden.

Hoffe, das hilft.

Verwandte Themen