0
현재 내 응용 프로그램에서 C++ (핵심 구현) 및 java (서비스 및 프레젠테이션)를 사용하고 있습니다. 이제 내 C++ 코어에서 JNI 코드를 잡아서 throwable 객체를 생성하고 Java 레이어에 던져 버리는 예외가 발생했습니다. 그래서 더 처리 될 수 있습니다. 나는 다음과 같은 코드를 사용하고 JNI에 예외를 잡기위한JNI에서 ctor를 호출 할 수 없습니까?
,
MyException(string str1, string str2, int cat1, int cat2);
하지만 내 JNI 코드에서
catch (namespace::MyException& excep) {
jclass ex = jenv->FindClass("namespace/MyException");
jmethodID constructor;
jthrowable object;
jobject obj;
if (ex)
{
constructor = jenv->GetMethodID(ex, "<init>", "(Ljava/lang/String;Ljava/lang/String;I;I)V");
if(!constructor)
{
SWIG_JavaThrowException(jenv, SWIG_JavaRuntimeException, (char*) excep.what());
return $null;
}
jstring str = jenv->NewStringUTF(excep.what());
jstring str2 = jenv->NewStringUTF(excep.GetStackTraceAsString());
obj = jenv->NewObject(ex, constructor, str, str2,excep.GetCat(),excep.GetCate());
object = static_cast<jthrowable>(obj);
jenv->DeleteLocalRef(str);
jenv->DeleteLocalRef(str2);
jenv->Throw(object);
}
return $null;
}
내 MyException 클래스의 C++ 서명이
내가 들어 methodId을 얻을 수 아니다 MyException CTOR.JNI 코드에서 무엇이 잘못되었을 수 있는지 말해 줄 수 있습니까? 필자가 생각하기에 GetMethodId()에는 parameterList에 문제가 있습니다.
감사합니다. maba가 나를 위해 일했습니다. 하지만 왜 원시 타입에 대한 이러한 변화가 의심 스럽습니다. –
세미콜론은 클래스 이름 정의를 끝내는 것입니다. ASCII라고 불리는 클래스를 상상해보십시오. 이름 서명은 어떻게 든 종료되어야합니다. 'LASCII; '. – maba
JNI에서 해결할 문제를 해결할 수있는 장소를 제안 할 수 있습니까? –