0
目前在我的應用程序中,我使用C++(核心實現)和java(服務和演示文稿)。現在在我的C++內核中,我收到了一個異常,我在JNI代碼中捕獲異常,並創建它的一個可拋出的對象,並將其扔到java層。這樣可以進一步處理。無法在JNI中調用ctor?
有關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++簽名
MyException(string str1, string str2, int cat1, int cat2);
但在我的JNI代碼,我沒能得到放在methodID對於MyException CTOR。
任何人都可以告訴我在JNI代碼中出了什麼問題。我懷疑是在GetMethodId()中的parameterList中存在一些問題。
感謝maba它爲我工作。但我懷疑爲什麼這種原始類型的改變。 – 2012-07-06 12:31:49
那麼分號是結束類名定義。設想一個叫做ASCII的類。簽名的名稱將不得不以某種方式終止; 'LASCII;'。 – maba 2012-07-06 12:37:36
你可以建議我一個可以參考的地方,讓我的問題解決JNI? – 2012-07-06 12:45:22