com.sun.jdi.InvocationException ist beim Aufrufen der Methode aufgetreten

Lesezeit: 4 Minuten

Benutzer-Avatar
xyy

Ich möchte nur ein Objekt der Klasse erstellen, habe aber diesen Fehler beim Debuggen erhalten. Kann mir jemand sagen, was das Problem ist? Die Position dieses Codes befindet sich in einer Spring(2.5)-Dienstklasse.

Es gibt ein ähnliches Problem: OJB Reference Descriptor 1:0-Beziehung? Soll ich den automatischen Abruf auf „false“ setzen?

Vielen Dank~

  • Es ist ziemlich schwer zu erraten, was Ihr Problem ohne Quellcode oder Stack-Trace ist.

    – Jim Garnison

    8. November 2010 um 15:37 Uhr

  • Ich habe herausgefunden, dass die Methode toString () der Klasse beim Aufrufen möglicherweise eine NullPointerException auslöst. Wenn ich sie korrigiere, ist der Fehler verschwunden, aber ich weiß nicht, wie das passiert ist.

    – xyy

    9. November 2010 um 1:45 Uhr

  • Gute Arbeit xyz. Können Sie bitte selbst eine Antwort auf die Frage posten und diese Antwort dann akzeptieren, damit wir diese Frage schließen können? Außerdem müssen Sie Antworten auf vorherige Fragen akzeptieren, wenn sie Ihr Problem beheben.

    – Zekas

    24. Mai 2012 um 14:17 Uhr

Die Hauptursache ist, dass beim Debuggen die Java-Debug-Schnittstelle toString() Ihrer Klasse aufruft, um die Klasseninformationen im Popup-Fenster anzuzeigen. Wenn die toString-Methode also nicht richtig definiert ist, kann dies passieren.

  • Was ist, wenn die toString-Methode überhaupt nicht definiert ist? Ich bekomme es in der RestTemplate-Klasse des Spring-Jars, das ist eine der Kernklassen, und es muss keine toString() -Methode geben. Trotzdem erhalte ich diese Ausnahme von einer anderen Klasse, in der ich RestTemplate.getForObject() aufrufe. Ich bin ahnungslos, was passiert.

    – Saurabh Patil

    12. Juli 2019 um 11:12 Uhr

  • @SaurabhPatil toString ist immer so definiert, dass sich alle Objekte erstrecken java.lang.Object. Eine Möglichkeit bei Spring besteht darin, dass Scoped Beans als Proxy verwendet werden, wenn sie in Singletons injiziert werden. Wenn toString im falschen Thread aufgerufen wird (z. B. einer, der nicht mit dem Anforderungskontext verknüpft ist), würde der Proxy beim Aufrufen eine Ausnahme auslösen toString darauf.

    – Murka

    21. August 2020 um 10:21 Uhr

Ich hatte auch eine ähnliche Ausnahme beim Debuggen in Eclipse. Wenn ich mit der Maus über ein Objekt fuhr, zeigte das Popup-Feld ein an com.sun.jdi.InvocationException Botschaft. Die eigentliche Ursache war für mich nicht das toString() Methode meiner Klasse, sondern die hashCode() Methode. Es verursachte a NullPointerExceptionwas die verursacht com.sun.jdi.InvocationException während des Debuggens erscheinen. Nachdem ich mich um den Nullzeiger gekümmert hatte, funktionierte alles wie erwartet.

Benutzer-Avatar
Anfänger

Nun, es könnte an mehreren Dingen liegen, die von anderen vorher und nachher erwähnt wurden. In meinem Fall war das Problem dasselbe, aber der Grund war etwas anderes.

In einer Klasse (A) hatte ich mehrere Objekte und eines der Objekte war eine andere Klasse (B) mit einigen anderen Objekten. Während des Prozesses war eines der Objekte (String) aus Klasse B null, und dann habe ich versucht, über die übergeordnete Klasse (A) auf dieses Objekt zuzugreifen.

Daher wird die Konsole werfen Nullpunkt-Ausnahme Der Eclipse-Debugger zeigt jedoch den oben genannten Fehler an.

Ich hoffe, Sie können den Rest erledigen.

  • @novice Dies ist das gleiche Problem, mit dem ich konfrontiert bin. Wie kann ich das beheben?

    – Mannjunath M

    31. Januar 2019 um 11:53 Uhr


Für mich wurde die gleiche Ausnahme ausgelöst, als der toString als solcher definiert wurde:

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

Wo ListElem ist ein verknüpftes Listenelement und ich habe a erstellt ListElem als solche:

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);

Dies führte effektiv zu einer zyklischen verketteten Liste, die nicht gedruckt werden kann. Danke für den Hinweis.

Ich hatte das gleiche Problem, weil ich die Lombok @Data-Annotation verwendet habe, die toString- und Hashcode-Methoden in Klassendateien erstellt hat, also habe ich die @Data-Annotation entfernt und eine bestimmte @Gettter @Setter-Annotation verwendet, die mein Problem behoben hat.

Wir sollten @Data nur verwenden, wenn wir @ToString, @EqualsAndHashCode, @Getter für alle Felder und @Setter für alle nicht finalen Felder und @RequiredArgsConstructor benötigen.

  • es hat mein Problem gelöst. Vielen Dank

    – Wasem

    20. Januar um 13:31 Uhr

Benutzer-Avatar
Praneeth

Ich hatte einmal das gleiche Problem. In meinem Fall wurde die Methode toString() schlecht erstellt. Um genau zu sein, wurde eine statische Endvariable in die toString-Methode aufgenommen, als einem Entwickler aus meinem Team eine Code-Reinigungsaufgabe zugewiesen wurde, und um, wo immer möglich, toString()-, hashCode()-Code und equals()-Methoden zu Domänenobjekten hinzuzufügen. aber in den Klassen, weil er es übersehen hatte, fügte er die letzte statische Variable hinzu, die die “com.sun.jdi.InvocationException” verursachte. Diese Ausnahme war beim Debuggen nur sichtbar, wenn ich mit der Maus über das Objekt fuhr, das die Ausnahme hat.

  • es hat mein Problem gelöst. Vielen Dank

    – Wasem

    20. Januar um 13:31 Uhr

Benutzer-Avatar
kakkurt

Ich habe eine ähnliche Ausnahme in Eclipse. Dies lag an java.lang.StackOverflowError Error. hatte ich überschrieben toString() Methode in der untergeordneten Klasse, mit JoinColumn, die eine Zeichenfolge mit dem Objekt der übergeordneten Klasse zurückgab, was zu einer zirkulären Abhängigkeit führte. Versuchen Sie, dieses Objekt aus zu entfernen toString()und es wird funktionieren.

1216860cookie-checkcom.sun.jdi.InvocationException ist beim Aufrufen der Methode aufgetreten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy