클래스를 찾지 못하면 생성 된 예외를 처리하는 동안 jthrowable의 메시지에 액세스하려고합니다. 그러나 jthrowable 객체의 getMessage() 메시지 ID에 액세스 할 수 없으며 그 이유를 알 수 없습니다. 나는 기쁨없이 getMessage의 서명을 "(Ljava/lang/String") 끝에 변경하려고 시도했다. (세미콜론을 사용하지 않았지만 꼭 필요한 것인가?) 나는 이것에 대해 지옥처럼 혼란 스럽다. 나는 toString을 getMessage로 대체하려고 시도해 보았고, 은이 작동하지 않았다. 분명히 나는 여기서 사소한 잘못을하고있다. 여기 JNI 코드가 jthrowable의 getMessage 메소드를 성공적으로 찾지 못하는 이유는 무엇입니까?
내가 사용하고 코드입니다 :jthrowable java_exception;
jclass java_class;
jmethodID method;
java_exception = (*jEnv)->ExceptionOccurred(jEnv);
assert (java_exception != NULL);
java_class = (*jEnv)->GetObjectClass (jEnv, java_exception);
assert (java_class != NULL);
method = (*jEnv)->GetMethodID (jEnv, java_class, "getMessage", "()Ljava/lang/String;");
if (method == NULL) {
printf ("Seriously, how do I get here?!\n");
(*jEnv)->ExceptionDescribe (jEnv);
return;
}
(다른 것들 사이)이 코드의 출력은 다음과 같습니다
:Compiled from "Throwable.java"
public class java.lang.Throwable extends java.lang.Object implements java.io.Serializable{
...
public java.lang.String getMessage();
Signature:()Ljava/lang/String;
...
Seriously, how do I get here?!
Exception in thread "main" java.lang.NoClassDefFoundError: com/planet/core360/docgen/Processor
javap -p -s java.lang.Throwable
그것은 나를 도왔습니다! :-) –
예외가 활성화되었을 때 GetObjectClass()가 작동하지 않을 수 있습니까? GetObjectClass를 호출하기 전에'(* env) -> ExceptionClear (env)'를 시도하십시오. – Qwertie