IT이야기

Java.lang.반사를 일으킬 수 있는 것.호출TargetException?

cyworld 2022. 5. 12. 22:02
반응형

Java.lang.반사를 일으킬 수 있는 것.호출TargetException?

글쎄, 나는 그것을 야기할 수 있는 것을 이해하고 읽으려고 노력했지만 나는 단지 이해할 수 없다.

내 코드에 이런 게 있어

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

중요한 것은, 그것이 어떤 방법을 불러오려고 할 때, 그것은 던져버린다.InvocationTargetException일부 다른 예상 예외 대신(추정)ArrayIndexOutOfBoundsException실제로 어떤 방법이 호출되는지 알고 있기 때문에 나는 바로 이 방법 코드로 가서 던져야 하는 라인에 대해 트라이캐치 블록을 추가했다.ArrayIndexOutOfBoundsException그리고 그것은 정말 충격적이었다.ArrayIndexOutOfBoundsException예상대로하지만 올라가면 어떻게 해서든 로 바뀐다.InvocationTargetException그리고 위의 코드에catch(Exception e)e isInvocationTargetException아닌 것 같다ArrayIndexOutOfBoundsException예상대로

무엇이 그런 행동을 유발할 수 있고, 어떻게 내가 그런 행동을 확인할 수 있을까?

반성과 함께 메소드를 호출하여 추상화 수준을 추가하셨습니다.은 어떤 도 반사 은 에서 .InvocationTargetException이 항목을 통해 실제로 반영 호출의 실패(예를 들어, 당신의 주장 목록이 유효하지 않았을 수도 있음)와 호출된 방법 내의 실패 사이의 차이를 알 수 있다.

단지 그 원인을 샅샅이 뒤져라.InvocationTargetException그러면 원래대로 가게 될 거야

예외는 다음과 같다.

InvocationTargetException - 기본 메서드가 예외를 발생시키는 경우.

따라서 반사 API로 호출된 메서드가 예외(예를 들어 런타임 예외)를 발생시키면 반사 API는 예외를 다음과 같이 처리한다.InvocationTargetException.

사용getCause()에 대한 방법.InvocationTargetException원래의 예외를 되찾기 위해

메소드의 자바도크로부터.발령을 내리다

던지기: InvocationTargetException - 기본 메서드가 예외를 발생시키는 경우

이 예외는 불리는 방법이 예외를 던진 경우 발생한다.

이렇게 하면 특정 방법의 정확한 코드 라인이 인쇄되며, 이 코드 라인은 호출될 때 다음과 같은 예외를 제기한다.

try {

    // try code
    ..
    m.invoke(testObject);
    ..

} catch (InvocationTargetException e) {

    // Answer:
    e.getCause().printStackTrace();
} catch (Exception e) {

    // generic exception handling
    e.printStackTrace();
}

저것InvocationTargetException아마 네 일을 마무리짓고 있을거야ArrayIndexOutOfBoundsException. 그 방법이 무엇을 던질 수 있는지 반사를 사용할 때 미리 알 수 있는 것은 없다 - 그래서 그 방법을 사용하는 것보다throws Exception 예외는 있다, 라고 .InvocationTargetException.

여기엔 다음과 같은 것이 설명되어 있다.

InvocationTargetException은 호출된 메서드 또는 생성자가 던진 예외를 감싸는 체크된 예외다.릴리스 1.4를 기준으로 이 예외는 범용 예외 체인 메커니즘에 적합하도록 수정되었다.건설 시 제공되고 getTargetException() 방식으로 접근하는 "대상 예외"가 현재 원인으로 알려져 있으며, 앞에서 언급한 "레거시 방식"뿐만 아니라, Detable.get Cause() 방식으로 접속할 수 있다.

다음과 같은 getCause() 방법을 사용하여 원래 예외 Class와 비교할 수 있다.

try{
  ...
} catch(Exception e){
   if(e.getCause().getClass().equals(AssertionError.class)){
      // handle your exception  1
   } else {
      // handle the rest of the world exception 
   }
} 

나는.java.lang.reflect.InvocationTargetException외부에서 로거 개체를 호출하는 문장의 오류class의 안쪽에try/catch내 말을 가로막다class.

Eclipse 디버거의 코드를 밟고 마우스를 로거 문 위로 맴돌면서 로거가 보였다.object있었다null(일부 외부 상수는 나의 맨 위에 인스턴스화되어야 했다.class).

이 예외는 기본 방법(반사를 사용하여 호출되는 방법)이 예외를 발생시킬 경우 발생한다.

따라서 반사 API에 의해 호출된 메서드가 예외를 발생시키는 경우(예: 런타임 예외), 반사 API는 예외를 InvocationTargetException으로 포장한다.

나도 같은 문제에 직면하고 있었다.나는 e.getCause()를 사용했는데 그 때 내가 지나가고 있는 매개 변수가 잘못되었기 때문이라는 것을 알았다.nullPointer가 있었다.매개 변수 중 하나의 값을 가져올 때의 예외.이것이 너에게 도움이 되기를 바라.

문제는 또한 targetSdkVersion이 상향 조정되고 사용되지 않는 Gradle 매니페스트 기능을 사용하는 것일 수 있다.대상SdkVersion을 다시 낮추어 작동하는지 확인하십시오.나의 경우 타겟SdkVersion 31 -> 30이었다.

  1. Eclipse Navigator 모드에서 모든 jar 파일 나열
  2. 모든 jar 파일이 이진 모드에 있는지 확인

Clean->Run xDoclet->Run xPackaging을 한 후 오류가 사라졌다.

내 작업공간에서, 에콜립스에서.

참조URL: https://stackoverflow.com/questions/6020719/what-could-cause-java-lang-reflect-invocationtargetexception

반응형