2016-04-14 77 views
1

我有我的Java代碼,其中Array是一個自定義對象。從jobject數組獲取Jclass或jobject JNI

public native int pax_store_get_data_avail_info(DataAvailable[] stats_array); 

我JNI生成的文件

JNIEXPORT jint JNICALL Java_demo_JNIWrapper_pax_1store_1get_1data_1avail_1info 
     (JNIEnv *env, jclass jclass1, jobjectArray jobj){ 
} 

我想填充jobjectArray的JNI裏面,當我試圖用我的FPGA實現我的程序崩潰。

JNIEXPORT jint JNICALL Java_demo_JNIWrapper_pax_1store_1get_1data_1avail_1info 
    (JNIEnv *env, jclass jclass1, jobjectArray jobj){ 


struct pax_store_data_avail_stat_s test_stat [2] ; 

    int i; 

    test_stat [0].time = 1460332625; // 4/10/2016, 4:57:05 PM 
    test_stat [0].bytes_in_this_second = 20; 

    test_stat [1].time = 1460332626; // 4/10/2016, 4:57:06 PM 
    test_stat [1].bytes_in_this_second = 30; 
    jclass dataClass=(*env)->GetObjectClass(env,"demo/DataAvailable");//Crash Over here 

我是不是能夠得到對象類。所以講授如果我從Jobject陣列的JCLASS或jobject。

是否有任何其他方法可以在JNI代碼中填充Jobject數組。

+0

你有沒有考慮*諮詢文件*您在使用'GetObjectClass()'在沒有記載,所以當然的一種方式?它不起作用,但是如果使用正確,那麼該方法就是您的問題的答案。 – EJP

回答

3

給出一個jobject可以使用GetObjectClass檢索對象的類別:

jobject object = ... 
jclass c =(*env)->GetObjectClass(env, object); 

顯然通過一個類名不起作用。相反 - 單一類名 - 使用FindClass獲得jclass

jclass c =(*env)->FindClass(env, "demo/DataAvailable");