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)

0 Comments:
Kommentar veröffentlichen
<< Home