38 votes

Le message d'exception est nul ?

J'ai un try-catch dans mon code. Dans mon bloc catch, j'appelle e.getMessage() pour imprimer le message de l'exception. Cependant, il n'est pas possible d'imprimer le message de l'exception, e.getMessage ne cesse de renvoyer une valeur nulle. Il est intéressant de noter que lorsque j'appelle e.printStackTrace, Je n'ai aucun problème à imprimer la trace de la pile.

Voici mon code :

try
{
    console = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream()));
}catch(Exception e)
{
    Log.d("Error", "Error Message: " + e.getMessage()); //e.getMessage is returning a null value
    e.printStackTrace(); //this works. is displaying a SocketTimeOutException
}

Quelle peut être la cause de mon problème ? Comment puis-je le résoudre ?

24voto

kostja Points 20153

Le message et la trace de la pile sont deux informations distinctes. Alors que la trace de pile est obligatoire, le message ne l'est pas. La plupart des exceptions portent un message, et c'est la meilleure pratique de le faire, mais certaines ne le font tout simplement pas et il n'y a rien à faire pour y remédier.

Vous pouvez cependant faciliter la tâche de vos clients et fournir un message en enveloppant l'exception sans message ou en lançant une exception personnalisée dont la cause est l'exception d'origine. Cela pourrait ressembler à ce qui suit.

throw new  MyRuntimeException("Socket was closed unexpectedly", e);

12voto

JB Nizet Points 250258

SocketTimeOutException est le type d'exception. Il est probable que cette exception (ou le code qui la lance) n'ait pas pris la peine de fournir un message avec l'exception, et ait pensé que le type de l'exception était suffisamment significatif. Utilisation

Log.d("Error", "Error Message: " + e);

ou

Log.d("Error", "Some exception occurred", e);

plutôt que de demander le message.

3voto

bvanvelsen Points 1712

E.printstacktrace() signifie la trace de la pile qui est presque toujours présente. Un message, en revanche, ne l'est pas. Si vous vérifiez la Javadoc de la méthode getMessage() vous remarquerez qu'elle peut renvoyer null. Il y aura un message si vous appelez le constructeur à partir d'une exception avec le paramètre String message Javadoc des exceptions

2voto

Tobias Breßler Points 126

Je pense que l'exception lancée dans votre code n'a pas de message. La chaîne est nulle. Mais bien sûr, vous pouvez imprimer la trace de la pile. Il s'agit de deux choses différentes. Vous verrez la trace de la pile, mais sans le message.

2voto

anilsinaci Points 316

Essayez de donner l'exception elle-même au logger au lieu de e.getMessage(). Les loggers ont généralement des méthodes qui attendent des objets Throwables et les configurations par défaut (généralement) des loggers affichent la trace de la pile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X