Three Visual Eclipse Tutorials

Sad to see, that all tutorials are old and based on Eclipse 3.1 or Eclipse 3.0.

Insel: Abfangen und Weiterleiten von Exceptions/fillInStrackTrace()

Die Ausnahme, die ein try/catch-Block auffängt, kann in catch wieder neu ausgelöst werden. Dieses Re-throwing zeigt folgendes Beispiel, in dem das Programm den Fehler erst über einen Logger ausgibt und dann weiter nach oben reicht.

Rethrow.java

import java.util.logging.Logger;

public class Rethrow

{

private static Logger log = Logger.getAnonymousLogger();

static void rethrow( RuntimeException e )

{

log.warning( "RuntimeException occurred!" );

// e.fillInStackTrace();

throw e;

}

public static void main( String[] args )

{

try

{

((String)null).length();

}

catch ( NullPointerException e )

{

rethrow( e );

}

}

}

Die Ausgabe ist:

16.08.2006 18:35:27 Rethrow rethrow

WARNUNG: RuntimeException occurred!

Exception in thread "main" java.lang.NullPointerException

at Rethrow.main(Rethrow.java:20)

Wichtig an der Stelle ist -- und daher die auf den ersten Blick unnötige Funktion rethrow() --, dass der Aufrufstack in e gespeichert ist, und daher der Stracktrace nicht die Funktion rethrow() enthält. Wünschten wir dies, müssen wir den Stracktrace neu füllen. Dazu dient die Funktion fillInStackTrace(). Nehmen wir sie im oberen Beispiel hinein, folgt die Ausgabe:

16.08.2006 18:36:16 Rethrow rethrow

WARNUNG: RuntimeException occurred!

Exception in thread "main" java.lang.NullPointerException

at Rethrow.rethrow(Rethrow.java:11)

at Rethrow.main(Rethrow.java:24)