Frage von Mikaai, 30

Java Fehler: java.lang.StackOverFlowError beheben?

Es geht hier um eine Unterrichtsaufgabe bei der Artikel1 und Artikel2 in Haupt- und Nebenhalle aufgeteilt werden soll je nachdem welche Kapazität die Hallen besitzen.

Der Quellcode wird ohne Probleme compiled, jedoch scheitert es dann mit der Fehlermeldung, wenn ich versuche ein Objekt dieser Klasse zu erzeugen. Durch einigermaßen gute Englischkenntnisse kann man auch verstehen, dass das Programm irgendwie überlastet ist, aber jetzt meine Frage. Wie lässt sich dieses Problem beheben?

Leider lässt sich der Quellcode nicht einfügen, da er zu lang für das Fragefenster ist.

Antwort
von FouLou, 26

Stackoverflow bedeutet das du irgendwo in deinen Aufrufen eine schleife drin hast. Meistens siehst du das schon am stacktrace weil sich immer und immer wieder die gleichen methoden wiederholen.

Hier mal ein einfaches beispiel:

public void foo(){

bar();

}

public void bar(){

foo();

}

Bei einem aufruf einer der beiden methoden wird es zu nem stackoverflow kommen weil die sich immer gegenseitig aufrufen.

Eventuell könntest du ja einfach den stacktrace der exception posten.

Kommentar von Mikaai ,

Vielen Dank! 

Das Problem war, dass ich in einer Methode zwei mal dieselbe Methode aufrufen wollte. 

Also ungefähr so, wobei beide Befehle noch in if Bedingungen verwickelt waren.

public void artikelAusgang()

  lager1.artikelHolen();

  lager1.artikelHolen(); 

}

Kommentar von FouLou ,

Das sollte eigentlich kein Problem sein. Wobei es natürlich davon abhängt was in artikelHolen passiert.

Du kannst im normalfall innerhalb einer methode die gleiche methode so oft aufrufen wie du möchtest.

Antwort
von PeterKremsner, 24

Den Fehler bekommt man oft wenn sich eine Funktion immer wieder selbst aufruft, also Prüfe zunächst mit dem Debugger ob das Programm nicht in so einer schleife hängt.

Kommentar von Mikaai ,

Vielen Dank! 

Das Problem war, dass ich in einer Methode zwei mal dieselbe Methode aufrufen wollte. 

Also ungefähr so, wobei beide Befehle noch in if Bedingungen verwickelt waren.

public void artikelAusgang()

  lager1.artikelHolen();

  lager1.artikelHolen(); 

}

Kommentar von PeterKremsner ,

An dem sehe ich an sich jetzt kein Problem.

Das Problem liegt also eher in der Methode artikelHolen.

Keine passende Antwort gefunden?

Fragen Sie die Community