在我的 C 代碼中,我想測驗一個 Java 例外,獲取有關它的資訊,并在本地處理它:
jobject exc = env->ExceptionOccurred();
if (exc) {
env->ExceptionClear();
jclass javaLang = env->FindClass("java/lang/Object");
jmethodID j_toString = env->GetMethodID(javaLang, "toString", "()Ljava/lang/String;");
auto s = (jstring)(env->CallObjectMethod(exc, j_toString));
...
}
我ExceptionClear()在靠近頂部的地方打電話,因為FindClass()如果我不這樣做,呼叫將導致“JNI FindClass 呼叫了未決例外”錯誤。但是如果我這樣做,例外物件是否仍然有效?
uj5u.com熱心網友回復:
ExceptionOccurred為您提供對例外物件的本地參考。所以它不會受到影響,ExceptionClear除非ExceptionClear也清除本地參考表,這會很奇怪(ART 和 Dalvik 都沒有這樣做 FWIW)。
我認為您可以放心地假設exc在ExceptionClear. 如果不是,您會注意到它,因為使用過時的本地參考會導致某種 JNI 錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/328260.html
標籤:爪哇 例外 java-native-接口
