2014-05-07 4 views
2

je vois un comportement de je ne peux pas expliquerthread Java se bloque silencieusement - Je ne peux pas attraper l'exception

J'ai un Runnable que son code est quelque chose de:

run() 
{ 
    print("start"); 
    try{ 
     doSomething(); 
     print("end");  

    }catch (Exception e){ 
     print("problem"); 
    } 
    print("method end"); 

} 

Le comportement est étrange parce que le seulement impression que je reçois est "démarrer" - je m'attends à obtenir le "problème" et la "fin de la méthode" imprime également. Et si le doSomething gère l'exception elle-même, la "fin" sera imprimée. Mais je ne reçois aucune des impressions sauf "démarrer"

Maintenant je sais qu'il y a un problème avec la méthode doSomething, comme si je l'exécutais pas par le biais du service d'exécution, j'obtiens l'exception "Méthode introuvable" .

Je pense qu'il pourrait être en quelque sorte connecté au service Executor que j'utilise - Executors.newFixedThreadPool, mais je ne peux pas l'expliquer

Merci pour vos conseils!

Répondre

8

NoSuchMethodError ne provient pas de Exception:

java.lang.Object 
    java.lang.Throwable 
     java.lang.Error 
      java.lang.LinkageError 
       java.lang.IncompatibleClassChangeError 
        java.lang.NoSuchMethodError 

ne sera donc pas pris par la clause affiché catch. Changer pour attraper Throwable ou ajouter une clause séparée catch pour Error et gérer différemment (tenter de récupérer à partir d'un Exception mais signaler un Error et ne pas tenter de récupérer par exemple).

4

Il est certain qu'un Error est levé. Essayez d'attraper Throwable à la place.

Éditer: En effet, java.lang.NoSuchMethodError est un Error.

Questions connexes