78 votes

com.sun.jdi.InvocationException survenue lors de l'invocation de la méthode

Je veux juste créer un objet de la classe, mais j'ai obtenu cette erreur lors du débogage. Quelqu'un peut-il me dire quel est le problème ? L'emplacement de ce code est dans une classe de service Spring(2.5).

Il existe un problème similaire : Descripteur de référence OJB 1:0 relation ? Dois-je définir la récupération automatique sur false ?

Merci beaucoup~

3 votes

Il est assez difficile de deviner quel est votre problème sans code source ou trace de pile.

8 votes

J'ai compris, la méthode toString() de la classe peut lancer une NullPointerException si elle est invoquée, quand je l'ai corrigée, l'erreur a disparu, mais je ne sais pas comment cela s'est produit ?

3 votes

Beau travail xyz. Pouvez-vous s'il vous plaît poster une réponse à la question vous-même et ensuite accepter cette réponse afin que nous puissions clore cette question ? De même, vous devez accepter les réponses aux questions précédentes si elles résolvent votre problème.

93voto

Frank Points 361

La cause première est que, lors du débogage, l'interface de débogage Java appelle la méthode toString() de votre classe pour afficher les informations relatives à la classe dans la fenêtre contextuelle ; si la méthode toString n'est pas définie correctement, cela peut se produire.

1 votes

Que se passe-t-il si la méthode toString n'est pas définie du tout ? Je l'obtiens dans la classe RestTemplate du jar de Spring, qui est l'une des classes principales, et elle n'a pas de méthode toString(). Pourtant, j'obtiens cette exception dans une autre classe où j'appelle RestTemplate.getForObject(). Je ne sais pas ce qui se passe.

1 votes

@SaurabhPatil toString est toujours défini comme tous les objets qui étendent java.lang.Object . Une possibilité avec Spring est que les beans scopés sont proxiés s'ils sont injectés dans des singletons. Si toString est appelé sur le mauvais thread (par exemple, celui qui n'est pas associé au contexte de la requête), le proxy lèvera une exception lors de l'appel à toString sur celui-ci.

29voto

doofuslarge Points 456

J'ai également eu une exception similaire lors du débogage dans Eclipse. Lorsque je passais la souris sur un objet, la fenêtre contextuelle affichait un message d'erreur de type com.sun.jdi.InvocationException message. Pour moi, la cause première n'était pas le toString() de ma classe, mais plutôt la méthode hashCode() méthode. Elle provoquait une NullPointerException qui a provoqué la com.sun.jdi.InvocationException pour apparaître pendant le débogage. Une fois que j'ai pris soin du pointeur nul, tout a fonctionné comme prévu.

18voto

Amit Points 18

Eh bien, cela pourrait être dû à plusieurs choses, comme l'ont mentionné d'autres personnes avant et après. Dans mon cas, le problème était le même, mais la raison était autre.

Dans une classe (A), j'avais plusieurs objets et l'un d'entre eux se trouvait dans une autre classe (B) avec d'autres objets. Au cours du processus, l'un des objets (String) de la classe B était nul, et j'ai alors essayé d'accéder à cet objet via la classe parente (A).

Ainsi, la console lancera exception du point zéro mais le débogueur d'Eclipse affiche l'erreur mentionnée ci-dessus.

J'espère que vous pourrez faire le reste.

0 votes

@novice C'est le même problème que je rencontre, comment le résoudre ?

5voto

arin Points 553

Pour moi, la même exception a été levée lorsque le toString était défini comme tel :

@Override
public String toString() {
    return "ListElem [next=" + next + ", data=" + data + "]";
}

Dónde ListElem est un élément de liste chaînée et j'ai créé un élément ListElem comme tel :

private ListElem<Integer> cyclicLinkedList = new ListElem<>(3);
ListElem<Integer> cyclicObj = new ListElem<>(4);
...

cyclicLinkedList.setNext(new ListElem<Integer>(2)).setNext(cyclicObj)
    .setNext(new ListElem<Integer>(6)).setNext(new ListElem<Integer>(2)).setNext(cyclicObj);

Cela a entraîné la création d'une liste chaînée cyclique qui ne peut pas être imprimée. Merci pour l'indication.

2voto

user1610812 Points 83

J'ai eu le même problème. J'ai découvert que mon instance de domaine se détachait de la session hibernate. J'ai utilisé isAttached() pour vérifier et rattacher le domaine en utilisant d.attach()

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