J'ai le code suivant:
Exception in thread "main" java.lang.NullPointerException at org.Test.myMethod(Test.java:674) at org.TestRunner.anotherMethod(TestRunner.java:505) at java.util.ArrayList(ArrayList.java:405)
8 Réponses :
Peut-être que vous n'avez pas d'appendeur pour la sortie de la console. Vous envisagez d'ajouter un. Sinon, connectez-le comme LOGGER.Error (ex); avec log4j ou slf4j p>
Pendant un certain temps, je pensais que cela pourrait être dû à la console de la journalisation. J'ai donc essayé de stocker l'exception dans une chaîne et de le remédier à moi. L'e-mail que contenait uniquement "java.lang.nullpointereException"
Si vous lancez à plusieurs reprises une exception, l'arrêt JVM remplit dans la trace de la pile. Je ne sais pas pourquoi, mais il peut être de réduire la charge sur la JVM. Vous devez regarder une trace de pile antérieure pour voir les détails.
No more stack trace after 20707 thrown.
L'exception pourrait être attrapée et jetée quelque part avant votre bloc de prise. Peut-être dans une autre classe que vous appelez à faire la logique. P>
Un Exception Code> créé comme
Nouvelle exception (nouveau lancable ("Java.lang.nullpointereException"))); code>
va imprimer quelque chose comme ce que tu vois . P>
Il s'est avéré que dans le bloc d'essai, il a apporté un appel à une autre méthode qui a eu un bloc d'essai avec une déclaration de capture qui a explicitement réduit l'exception (semblable à votre exemple, sauf qu'ils n'ont pas eu de codes "NullpointeException", mais plutôt juste tronqué la cause de la stacktrace).
@David - J'envisageai sérieusement passer à un autre produit. En supprimant délibérément, des informations d'exception comme celle-ci incombent à l'intérêt supérieur de leurs clients / utilisateurs. Trouvez un autre fournisseur qui ne fait pas ce genre de chose de merde.
Je ne peux que penser que 2 raisons pour lesquelles E.PrintStackTrace () code> pourrait produire uniquement la chaîne
"java.lang.nullpointereException" p>. p>.
setstacktrace (nouveau StackTraceElement [0]) code> à l'exception. LI>
printstacktrace () code> ou une autre méthode pour renvoyer des informations trompeuses. LI>
ul>
Ceci est Beacause Java fait une optimisation du code lorsqu'elle est exécutée en mode serveur (Java -server)
ignorer cela. Utilisez -xx: -omittstacktraceinffastthrow code> dans java args
Voir le lien ci-dessous pour plus de détails: P>
Au lieu de désactiver cette optimisation sur un serveur de production, je voudrais simplement suivre les conseils de Peter et regarder une erreur antérieure dans le journal.
Je suis d'accord que vous pouvez faire lorsque vous possédez le code, si vous dépendez de quelqu'un d'autre, jusqu'à ce qu'ils corrigent, c'est le meilleur que vous puissiez faire.
C'est certainement ce qui a provoqué le problème similaire pour moi sur Prod. Merci pour la réponse!
Cela existe sur OpenJDK7 mais pas sur OpenJDK8.
Quelqu'un a-t-il des idées sur la manière dont je peux capturer la trace complète de la pile à une chaîne? p>
Vous pouvez utiliser le moyen ci-dessous (StringWriter.tostring ()) pour transférer la trace de la pile dans une chaîne. P>
StringWriter writer = new StringWriter(); e.printStackTrace( new PrintWriter(writer,true )); System. out.println("exeption stack is :\n"+writer.toString());
Assurez-vous d'utiliser E.PrintStackTrace (), au lieu de E.getstackTrace (); P>
Qu'est-ce qui pourrait bloquer le code ci-dessus de l'impression de la structure complète? p>
Dans mon cas, une superclasse de l'exception code> que j'étais capturé avait ce code: p>
xxx pré> Ceci signifiait que la matrice de trace de la pile n'a jamais été Rempli de sorte que tout ce que j'ai eu était: p>
xxx pré> sans information de pile, donc aucune idée où em> Ça arrive. Charmant. P>
J'ai pu remplacer ce comportement en saisissant la source de l'exception code> code>, en copiant dans mon projet et en supprimant le
FillinStackTrace () code> méthode. C'est un hack mais j'avais besoin d'informations de cette exception
code>. P> blockQuote>
On dirait que le tableau StackTraceElement dans NPE est en train de se réinitialiser pour vider. Est-ce que quelque chose appelle SsteStackTrace sur le NPE?
@Dangravell - Non, rien ne devrait appeler SsteStackTrace.
Êtes-vous capable de déboguer cela dans une IDE? Pourrait valoir la peine de définir un point d'arrêt dans le bloc de capture pour voir si l'exception est «parfaitement formée».
Ajoutez la sortie enregistrée de votre
myMethod () code> ou de votre méthode réelle.
E.PrintStackTrace (); code> normalement doit imprimer la trace de remplissage.