案例四:回撥例項方法與靜態方法
描述:此案例將通過Java呼叫的C語言程式碼回撥Java方法。
要想呼叫例項物件的方法,需要進行以下步驟:
1. 通過物件例項,獲取到物件類的引用 => GetObjectClass()
2. 通過類引用,獲取到方法ID => GetMethodID()
需要提供方法名,和方法簽名。也就是需要這兩個資訊來標識確定一個方法。
方法簽名格式:(引數列表)返回值型別。
例如: ()V或(Ljava/lang/String;)V等等。這裡的所說的型別表示與案例三相同
你可以通過javap命令工具,檢視方法的簽名。例如,以下是下面例子的方法簽名(描述)。
3. 基於方法ID,你可以根據返回值型別,呼叫Call<基本型別>Method()或者CallVoidMethod()或CallObjectMethod(),來呼叫對應的方法。
本例所有生成的檔案如下:
(一)編寫Java程式碼
(二)編譯Java程式碼,並生成標頭檔案
(3)編寫C程式碼實現
(4)編譯C程式碼生成動態連結庫,libdemo4.so
(5)執行Java程式碼
由此,可知Java回撥方法已被正確呼叫
- JNI (Java Native Interface)(一)
- JNI (Java Native Interface)(二)
- JNI (Java Native Interface)(三)
- JNI (Java Native Interface)(四)