StackOverflow abfangen

Status
Nicht offen für weitere Antworten.

0xdeadbeef

Top Contributor
Habe mir einen mathematischen Parser geschrieben, in dem man auch Funktion definieren und (wenn man will) rekursiv aufrufen kann. Dabei kommt es relativ rasch zu einem StackOverflow. Natürlich mochte ich dann auch in der Konsole einen Stack Overflow melden, also muß ich den Overflow per catch abfangen und entsprechend behandeln.
Theoretisch sollten Error-Objekte wie StackOverflow "throwable" sein, allerdings scheint der catch-Block ignoriert zu werden.

Die Javainsel schreibt dazu:
"Da die Fehler »abnormales« Verhalten anzeigen, müssen sie auch nicht mit einem try/catch-Block aufgefangen werden. Allerdings ist es möglich, die Fehler mit einem try/catch aufzufangen, da Error-Klassen Unterklassen von Throwable sind und sich daher genauso verhalten. In sofern ist ein Auffangen legitim und auch ein finally ist korrekt."

Warum geht das in der Praxis aber trotzdem nicht?
 
B

Beni

Gast
Also bei mir kann ich Overflows abfangen:
Code:
public class Test4{
	public static void main( String[]args ){
		try{
			main( args );
		}
		catch( StackOverflowError t ){
			System.out.println( "catched" );
		}
	}
}

Bist du sicher, dass du das try-catch um den richtigen Bereich gemacht hast?
Sonst lass mal Code sehen...
 
B

bygones

Gast
dito
Code:
ublic class RecTest {
	public static void main(String[] args) {
		try {
			recTest(0);
		}
		catch(StackOverflowError e) {
			System.out.println("overflow !!");
		}
	}
	
	public static void recTest(int i) {
		recTest(i+1);
	}
}
 

meez

Top Contributor
Das ist ein Error KEINE Exception und sollte eigentlich nicht vorkommen!!
Da ist dein Parser einfach nicht ok... (Wahrscheinlich eine Endlosrekursion)
 
B

bygones

Gast
nein muss nicht endlos sein... ab einer gewissen Tiefe wird der Error geworfen... d.h. aber noch nicht endlos
 
B

bygones

Gast
DesertFox hat gesagt.:
gibts dazu eigentlich einen mathematischen Beweis ? würd mich interessieren...

bygones - wir weichen vom Thema ab... also bitte bei der Problematik bleiben !!
 

0xdeadbeef

Top Contributor
meez hat gesagt.:
Das ist ein Error KEINE Exception und sollte eigentlich nicht vorkommen!!
Da ist dein Parser einfach nicht ok... (Wahrscheinlich eine Endlosrekursion)

Ein sehr intelligenter Einwurf :roll:


An die anderen:
Leider muß ich allerdings eingestehen, daß ich in nächtlicher Programmierverwirrung den catch-BLock tatsächlich an der falschen Stelle eingebaut hatte. Klappt jetzt wie gewünscht. Mea culpa.
 

Vatar

Bekanntes Mitglied
moin moin.
Hab grad das gleiche Problem. Ich durchsuche ca 480 xml-Files (sind nicht all zu groß), lege aber relativ viele Objekte an (z.B. für einen JFace TreeViewer). Wenn ich meine Suche mehrfach durchführe taucht sporadisch ein Stackoverflow auf und das seltsame an der Sache: er taucht sofort auf (nachdem ich die Suche gestartet habe, welche ca 30sec benötigt). Ich habe auch nirgendwo eine Endlosschleife (ca 3 Schleifen und das wars) oder komplexe mathematische Berechnungen.
Desweiteren gebe ich bereits jedesmal vor dem Start der Suche nicht benötigte Objekte frei und fordere eine GarbageCollection an.

Kennt einer dieses Problem und weiß eine Lösung?
thx
 

dotlens

Top Contributor
wenn der overflow erst beim 2ten mehrfachen ausführen auftauch und dann schon am anfang deuted das darauf, dass du resourcen von den ersten versuchen noch belegst. vieleicht erstellst du neue variablen? fügst einer map immer mehr hinzu ohne sie vorher zu leeren?
 

Vatar

Bekanntes Mitglied
Danke für den Tip. An einer Stelle hab ich was geändert, aber der Overflow taucht immer noch sporadisch auf (wenn ich immer gleich teste taucht er mal auf und dann wieder ewig gar nicht).
Ich verwende sehr viele Zeiger für Listen, erzeuge aber eigentlich keine neuen Objekte.
 

Vatar

Bekanntes Mitglied
So, ich konnte den Fehler nun eingrenzen. Man könnte diesen Thread jetzt eigentlich schon zum SWT-Forum packen (ich schreib aber mal hier weiter).

Ich beschreib mal kurz mein Proggi:
ich durchsuche mehrere XMLs, welche eine Query speichern, nach DataObjects und Attributen. Finde ich die gesuchte Kombination, so wird einem JFace-TreeViewer (das ist der Überltäter) diese Query hinzugefügt.
Sieht dann nach der Suche ungefähr so aus:

Query 1
--> DataObject 1
------> Attribut 1
------> Attribut 2
--> DataObject 2
--> DataObject 3
------> Attribut 1
------> Attribut 2

und jetzt das Problem: der StackOverflow taucht bei der nächsten Suche nur dann auf, wenn ich den Tree in irgendeiner Form aufklappe. Lasse ich ihn komplett geschlossen, kann ich zig mal suchen :autsch:?

Die ArrayList welche ich im Model zum speichern der Struktur verwende leere ich vor jeder neuen suche, refreshe den TreeViewer, fordere eine GarbageCollection an und starte erst dann die Suche -> nützt alles nix

P.S: den Source will ich euch jetzt nicht antun, ist nämlich relativ viel. Hab mich, was den TreeViewer und das Model betrifft sehr stark an dieses Tutorial gehalten (ohne die Filter)

Hat jemand einen Tip?
 

Vatar

Bekanntes Mitglied
Fehler gefunden:
Mann sollte bei der Methode getParent(Object element) auch wirklich das Parent zurückgeben und nicht das element :oops: .
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Stackoverflow verhindern Allgemeine Java-Themen 4
K Threads StackOverflow Allgemeine Java-Themen 12
M Eclipse Stackoverflow beim Einlesen von großen Bilder in kd Baum Allgemeine Java-Themen 15
S Binärer Suchbaum Stackoverflow Problem Allgemeine Java-Themen 4
S StackOverflow Allgemeine Java-Themen 7
H StackOverflow Fehler? Allgemeine Java-Themen 3
foobar [groovy]Stackoverflow bei invokeMethod Allgemeine Java-Themen 3
J Warum Stackoverflow oder Nullpointerexeption? Allgemeine Java-Themen 4
S StackOverflow Allgemeine Java-Themen 10
S Rekursion und StackOverflow Allgemeine Java-Themen 11
P Stackoverflow in Rekursion. Bin ich schuld oder Java? Allgemeine Java-Themen 9
nico3000 Rekusrion mit Stackoverflow Allgemeine Java-Themen 7
I Vector serialisieren: StackOverflow Allgemeine Java-Themen 13
CodingBerlin Mouse Clicks abfangen Allgemeine Java-Themen 4
X jvm exception abfangen und an externes Programm schicken Allgemeine Java-Themen 4
S equals-Methode bestimmer Klassen abfangen Allgemeine Java-Themen 2
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Swing java command line abfangen Allgemeine Java-Themen 8
C Swing Abfangen von Fehlern in GUI Allgemeine Java-Themen 4
R Threads Exceptions von Threads abfangen im ThreadPool Allgemeine Java-Themen 5
C Kopiervorgang abfangen Allgemeine Java-Themen 10
T Methoden In Konsole tasten abfangen? Allgemeine Java-Themen 4
B Windows Shutdown abfangen Allgemeine Java-Themen 10
O Input/Output CMD-Ausgabe abfangen und in Datei speichern Allgemeine Java-Themen 8
D Nullpointer abfangen Allgemeine Java-Themen 7
V JNI Call Crash verhindern (abfangen) Allgemeine Java-Themen 2
E JAVA URL abfangen und weiterleiten? Filter? Allgemeine Java-Themen 6
F Alle Exceptions abfangen Allgemeine Java-Themen 4
reibi NoClassDefFoundError abfangen Allgemeine Java-Themen 6
N BlueJ Abfangen vom Beenden Allgemeine Java-Themen 7
B Alle Exceptions auf einmal abfangen Allgemeine Java-Themen 4
B Exception wird geworfen, ich darf sie aber nicht abfangen. Allgemeine Java-Themen 10
P [SWT] Copy, Paste und Cut abfangen Allgemeine Java-Themen 6
T WeakHashMap: Wie "null" effizient abfangen? Allgemeine Java-Themen 5
R Loading-Thread und Exceptions abfangen. Allgemeine Java-Themen 4
G Tastatursignale abfangen oder ist Java dafuer zu abstrakt? Allgemeine Java-Themen 12
I Das EOF (Ctrl + Z) abfangen Allgemeine Java-Themen 8
E programm im background tastendruck abfangen Allgemeine Java-Themen 4
H NullPointerException trotz Abfangen von null? Allgemeine Java-Themen 9
M Speichern von Word als Event abfangen Allgemeine Java-Themen 7
W Das schließen des JFrame abfangen, wiei? Allgemeine Java-Themen 6
P Nicht terminierende Methoden abfangen - timeout ? Allgemeine Java-Themen 3
reibi Aktion Taste gedrückt abfangen Allgemeine Java-Themen 9
G Bildschirmänderung abfangen? Allgemeine Java-Themen 4
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
B Fehlermeldung von dispatcher.forward abfangen Allgemeine Java-Themen 2
P CLAmp-Ausgaben abfangen Allgemeine Java-Themen 2
H Programmterminierung abfangen Allgemeine Java-Themen 4
R Alle Konsolenausgaben abfangen Allgemeine Java-Themen 8
G outOfMemoryError beim Einlesen einer Datei abfangen? Allgemeine Java-Themen 13
F Überlauf abfangen Allgemeine Java-Themen 1
J ToolTipText Event abfangen Allgemeine Java-Themen 5
M unterschiedliche Betriebssysteme abfangen Allgemeine Java-Themen 3
C LinkedList Exception abfangen Allgemeine Java-Themen 8
M Runtime.getRuntime().exec() - Fehler abfangen Allgemeine Java-Themen 5
L Tastatureingaben abfangen Allgemeine Java-Themen 6
M err oder alle Exceptions eines Programms abfangen Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben