Wie kann man die Ausgabe einer überlangen Exception verhindern?
Die Lösung dieses Problems gestaltet sich sehr einfach: Es
gilt die geworfenen Errors und Exceptions abzufangen und die
Ausgabe des StackTraces zu verhindern.
Hierzu wird der zu
prüfende Code-Teil provisorisch in einen try-catch-Block
eingeschlossen. Da manchmal nicht so recht klar ist welche Exception
geworfen werden kann, werden alle Fehler und Ausnahmen dadurch
abgefangen, dass der leeren catch-Anweisung eine Instanz der
Klasse Throwable übergeben wird. Sie ist die
Elternklasse aller Exceptions und Errors.
public class NoTrace {
public static void noTrace(int i) {
try {
if (i == 10) {
System.out.println(i);
noTrace(++i);
}
if (i == 11) {
System.out.println(i);
noTrace(--i);
}
} catch (Throwable t) {
System.exit(0);
}
}
public static void main(String[] args) {
noTrace(10);
}
}
Im gezeigten Beispiel wird eine Methode noTrace()
deklariert, in der ein int-Parameter wechselweise
dekrementiert und inkrementiert wird und rekursiv der
aufgerufenen Methode erneut übergeben wird. Das Ergebnis
ist ein StackOverflowError.
Die Routine
läuft innnerhalb des o.a. try-catch-Blocks ab.
Schlägt der Versuch fehl, wird das Programm beendet und
eventuelle Ausgaben sind der Konsole zu entnehmen. Ein
Endloslauf wird auf diese Weise verhindert.