376 Stimmen

Was könnte java.lang.reflect.InvocationTargetException verursachen?

Ich habe versucht zu verstehen und zu lesen, was die Ursache sein könnte, aber ich kann es einfach nicht verstehen:

Ich habe dies irgendwo in meinem Code:

 try{
 ..
 m.invoke(testObject);
 ..
 } catch(AssertionError e){
 ...
 } catch(Exception e){
 ..
 }

Die Sache ist die, dass, wenn es versucht, s aufzurufen InvocationTargetException anstelle einer anderen erwarteten Ausnahme (insbesondere ArrayIndexOutOfBoundsException ) Da ich eigentlich weiß, welche Methode aufgerufen wird, bin ich direkt zu diesem Methodencode gegangen und habe einen try-catch-Block für die Zeile hinzugefügt, die vermutlich auslösen soll ArrayIndexOutOfBoundsException und es warf wirklich ArrayIndexOutOfBoundsException wie erwartet. Wenn jedoch g ändert sich irgendwie zu InvocationTargetException und in dem obigen Code catch(Exception e) e ist InvocationTargetException und nicht ArrayIndexOutOfBoundsException wie erwartet.

Was könnte ein solches Verhalten verursachen bzw. wie kann ich so etwas überprüfen?

1voto

Abhay Nagaraj Punkte 83

Aufruf Ziel Ausnahme :

Ich bin der festen Überzeugung, dass in jede Benennungskonvention sorgfältige Überlegungen investiert wurden steckt. Und es ist mehr als wahrscheinlich, dass unsere Fragen ihre Antworten in den Namen finden, wenn wir versuchen, eine Begründung für den Namen zu finden.

Wir wollen den Namen in 3 Teile aufteilen. " Ausnahme " eingetreten ist, wenn " Aufrufen von " a " Ziel " Methode. Und die Ausnahme wird mit diesem Wrapper ausgelöst, wenn eine Methode über Reflexion in Java. Während der Ausführung der Methode kann jede Art von Ausnahme ausgelöst werden. Die eigentliche Ursache der Ausnahme wird abstrahiert, damit der Endbenutzer weiß, dass die Ausnahme während eines reflexionsbasierten Methodenzugriffs aufgetreten ist. Um die tatsächliche Ursache zu erfahren, empfiehlt es sich, die Ausnahme abzufangen und ex.getCause() genannt wird. Die beste Praxis ist, die Ursache aus dem Catch-Block zu werfen, der die InvocationTargetException

try{
    method.invoke();
} catch(InvocationTargetException ite) {
    throw ite.getCause();
} catch(Exception e) {
    // handle non-reflection originated exceptions
    throw e;
}

Ich weiß, es ist ähnlich wie bei den anderen Antworten, aber ich wollte deutlicher machen, "wann" dieser Ausnahmetyp von Java erzeugt wird, so dass es für niemanden ein Rätsel ist.

0voto

Nikhil Kumar Punkte 2248

Diese Ausnahme wird ausgelöst, wenn die zugrunde liegende Methode (Methode, die mit Reflection aufgerufen wird) eine Ausnahme auslöst.

Wenn also die Methode, die von der Reflection-API aufgerufen wurde, eine Ausnahme auslöst (z. B. eine Laufzeitausnahme), wird die Reflection-API die Ausnahme in eine InvocationTargetException verpacken.

0voto

Deepak Vajpayee Punkte 318

Ich stand vor dem gleichen Problem. Ich habe e.getCause().getCause() verwendet und dann festgestellt, dass es an den falschen Parametern lag, die ich übergeben habe. Es gab eine nullPointerException beim Abrufen des Wertes von einem der Parameter. Ich hoffe, dies hilft Ihnen weiter.

-4voto

Manik Punkte 11
  1. Auflisten aller jar-Dateien aus dem Eclipse-Navigator-Modus
  2. Überprüfen Sie, ob alle jar-Dateien im Binärmodus sind

-9voto

Ashutosh Anand Punkte 171

Der Fehler verschwand, nachdem ich Clean->Run xDoclet->Run xPackaging.

In meinem Arbeitsbereich, in ecllipse.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X