日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android JNI开发摘录(四)之JNI异常处理

發布時間:2025/4/5 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android JNI开发摘录(四)之JNI异常处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

五.處理本機代碼中的異常

? ? 為了處理以Java代碼實現的方法執行中拋出的異常,或者是以本機代碼編寫的方法拋出的Java異常,JNI提供了Java異常機制的鉤子程序。該機制與C/C++中常規函數實現的標準錯誤處理無關。JNI提供一個函數集來在本機代碼中檢查、分析和處理Java異常。

? ?(1).如果一個異常已經拋出,下面的函數返回JNI_TRUE,否則返回JNI_FALSE:


jboolean ExceptionCheck();

/*如:當異常發生時,清理并拋出自定義異常*/
if(env->ExceptionCheck())
{
? env->ExceptionClear();//清除異常
? env->ThrowNew(env->FindClass("java/lang/Exception"),"xx異常");
}



? ?(2).ExceptionOccurred函數獲取正在被拋出異常的一個本地引用。本機代碼或者Java代碼必須處理該異常:

jthrowable ExceptionOccurred();


? ?(3).ExceptionDescribe函數打印有關剛剛被拋出到標準錯誤輸出中的異常信息。該信息包括一個棧追蹤信息:

void ExceptionDescribe();


? ?(4).ExceptionClear函數清理一個剛剛拋出的異常:

void ExceptionClear();


? ?(5).Throw 函數拋出一個已經創建的異常。如果異常成功拋出,返回0;否則返回一個負值:

jint Throw(jthrowable obj);

/*可以這樣使用:手動拋出異常,然后在本機或Java代碼中處理*/
jthrowable mException = NULL;
mException = env->ExceptionOccurred();
if (mException != NULL) {
? ? ? ?env->Throw(mException);
/*或拋出自定義異常
? ? ? ?env->ThrowNew(env->FindClass("java/lang/Exception"),
? ? ? ? ? ? ? ?"xxx異常"); */
//最后別忘了清除異常,不然還是會導致VM崩潰
? ? ? ?env->ExceptionClear();
return -1;
? ?}



? ?(6).ThrowNew函數基于clazz創建一個異常,它應該是繼承自Throwable,并且異常文本是由msg(按照UTF-8)指定。如果異常的構造以及拋出成功,返回0;否則返回一個負值。

jint ThrowNew(jclass clazz,constchar *msg);

/*如:在可能出錯的地方拋出自定義異常,然后在本機代碼或者Java代碼中處理*/
env->ThrowNew(env->FindClass("java/lang/Exception"),
? ? ? ? ? ? ? ?"xxx異常");




? ? (7)FatalError函數會生成致命錯誤信號。一個致命錯誤是特指無法恢復的情況。VM在調用該函數之后將會關閉:

void FatalError(constchar *msg);


轉載于:https://blog.51cto.com/huihui88/1399266

總結

以上是生活随笔為你收集整理的Android JNI开发摘录(四)之JNI异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。