web-dev-qa-db-fra.com

Le message d'exception est nul?

J'ai une instruction try-catch Dans mon code. Dans mon bloc catch, j'appelle e.getMessage() pour imprimer le message de l'exception. Cependant, e.getMessage Continue de renvoyer une valeur nulle. Fait intéressant, 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 pourrait être la cause de mon problème? Comment le résoudre?

31
Arci

Le message et le stacktrace sont deux informations distinctes. Bien que le stackstrace soit obligatoire, le message ne l'est pas. La plupart des exceptions comportent 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 le corriger.

Vous pouvez cependant faciliter la tâche à vos clients et fournir un message en encapsulant l'exception sans message ou en lançant une exception personnalisée avec l'exception d'origine comme cause. Cela pourrait ressembler à la suite.

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

SocketTimeOutException est le type de l'exception. C'est probablement juste que cette exception (ou le code qui la lève) n'a pas pris la peine de fournir un message avec l'exception, et pensait 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.

9
JB Nizet

e.printstacktrace () signifie la trace de pile réelle qui est presque toujours présente. Un message cependant pas. Si vous vérifiez le Javadoc de la méthode getMessage () , vous remarquerez qu'il peut retourner null. Il y aura un message si vous appelez le constructeur d'exception avec le paramètre de message String Exception Javadoc

2
bvanvelsen

Je pense que l'exception qui est levé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. Ce sont deux choses différentes. Vous verrez la trace de la pile, mais sans le message.

1
Tobias Breßler

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

1
anilsinaci