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이었다.
- Eclipse Navigator 모드에서 모든 jar 파일 나열
- 모든 jar 파일이 이진 모드에 있는지 확인
Clean->Run xDoclet->Run xPackaging을 한 후 오류가 사라졌다.
내 작업공간에서, 에콜립스에서.
'IT이야기' 카테고리의 다른 글
Vue.js에서 가치를 비반복적으로 만드는 방법은? (0) | 2022.05.12 |
---|---|
열거형 변수를 문자열로 변환하는 방법 (0) | 2022.05.12 |
스택 추적 또는 반사를 사용하여 메서드를 호출한 사람을 찾으려면 어떻게 해야 하는가? (0) | 2022.05.12 |
Vue 조건부 v-on 이벤트 차단 한정자 (0) | 2022.05.12 |
Vuex 모듈의 형식 오류 "표현으로 호출될 때 클래스 장식가의 서명을 확인할 수 없음" (0) | 2022.05.12 |