Pourquoi mon NullPointerException ne pas être attrapé dans mon bloc catch?

J'ai un thread dans lequel j'attrape toutes les erreurs dans un grand, qui englobe tout le bloc catch. Je fais ce que je puisse signaler toute erreur, et pas seulement ceux attendus, dans mon application. Mon Exécutable ressemble à ceci:

public final void run()
{
    try
    {
        System.out.println("Do things"); /* [1] */

        doUnsafeThings();
    }
    catch (Throwable t)
    {
        System.out.println("Catch"); /* [2] */

        recover();
    }
    finally
    {
        System.out.println("Finally"); /* [3] */
    }
}

J'attendrais la NPE d'être pris par le Throwable bloc catch. Au lieu de cela, la sortie de [2] n'est pas imprimé, et il n'est ni [3]. La sortie de [1] est imprimé.

Ce que je fais sur la console, est-ce:

Uncaught exception java/lang/NullPointerException.

Ce qui sur terre se passe ici?

Pour les dossiers de la cour, je suis en utilisant J2ME, et c'est en cours d'exécution dans le Soleil du WTK v2.5.2 émulateur.

Je suis tenté de le mettre vers le bas à la JVM de la mise en œuvre dodginess mais je peux pas m'empêcher de penser que je suis juste en manque de quelque chose.

À préciser, pour éviter tout doute (Puisque le code de l'exemple est évidemment modifié mon code de production)

  • Il n'y a rien en dehors de la try/catch/finally bloc dans la méthode run.
  • Il existe un Système..println au début de chacun de ces blocs - Ce qui suit ceux de la console états ne devrait pas d'importance.
Est la sortie de [1] sur l'écran?
Oui, [1] est affiché.
Oh, et puis-je avoir votre autographe, M. Skeet? 😛

OriginalL'auteur izb | 2009-04-22