我有下面的Java代码,其中数组是一个自定义对象。
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){
}
我想在JNI中填充jobjectArray,当我尝试使用我的实现时,我的程序崩溃了。
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数组。
最佳答案
给定jobject
可以使用GetObjectClass
检索对象的类:
jobject object = ...
jclass c =(*env)->GetObjectClass(env, object);
显然,传递类名不起作用。相反-给定类名-使用
FindClass
获取jclass
:jclass c =(*env)->FindClass(env, "demo/DataAvailable");
关于java - 从Jobject数组JNI获取Jclass或jobject,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36634995/