从 jobject 数组 JNI 获取 Jclass 或 jobject
Get Jclass or jobject from jobject array JNI
我有下面的 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
我无法获取对象 Class。所以如果我从 Jobject 数组中获取 jclass 或 jobject,请教我。
是否有任何其他方法可用于在 JNI 代码中填充作业对象数组。
给定一个 jobject
你可以使用 GetObjectClass
来检索对象的 class:
jobject object = ...
jclass c =(*env)->GetObjectClass(env, object);
显然传递一个 class 名称是行不通的。相反 - 给定一个 class 名称 - 使用 FindClass
获得 jclass
:
jclass c =(*env)->FindClass(env, "demo/DataAvailable");
我有下面的 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
我无法获取对象 Class。所以如果我从 Jobject 数组中获取 jclass 或 jobject,请教我。
是否有任何其他方法可用于在 JNI 代码中填充作业对象数组。
给定一个 jobject
你可以使用 GetObjectClass
来检索对象的 class:
jobject object = ...
jclass c =(*env)->GetObjectClass(env, object);
显然传递一个 class 名称是行不通的。相反 - 给定一个 class 名称 - 使用 FindClass
获得 jclass
:
jclass c =(*env)->FindClass(env, "demo/DataAvailable");