NullPointerException 试图从 JNI 填充数组
NullPointerException trying to populate array from JNI
当我从 JNI.I 调用 setTimeStamp 方法时收到空指针异常,想在 JNI 端填充数组。(数组是自定义对象的数组)
可用数据
public class DataAvailable {
String timestamp;
public void setTimeStamp(String timestamp) {
System.out.println("Timestamp is "+timestamp);
this.timestamp = timestamp;
}
JNIWrapper.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){
jclass dataClass=(*env)->FindClass(env,"demo/DataAvailable");//Get the java class
for(i=0;i< 2;i++)
{
jobject j=(*env)->GetObjectArrayElement(env,jobj,i);
jmethodID meth=(*env)->GetMethodID(env,dataClass,"setTimeStamp","(Ljava/lang/String;)V");//this gets the method id present in the class
if(meth==NULL){
printf("Method set is null");
}
jstring x = (*env)->NewStringUTF(env,"2013-12");
(*env)->CallObjectMethod(env,j,meth,x);//This is where I get Null Pointer
}
(*env)->DeleteLocalRef(env, dataClass);
return 0;
}
正如@Alex Cohn 和@immbis 所建议的那样,传递给 JNI 的数组未被填充,因此得到一个空指针
感谢 Alex Cohn 和 immbis 的建议。
当我从 JNI.I 调用 setTimeStamp 方法时收到空指针异常,想在 JNI 端填充数组。(数组是自定义对象的数组)
可用数据
public class DataAvailable {
String timestamp;
public void setTimeStamp(String timestamp) {
System.out.println("Timestamp is "+timestamp);
this.timestamp = timestamp;
}
JNIWrapper.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){
jclass dataClass=(*env)->FindClass(env,"demo/DataAvailable");//Get the java class
for(i=0;i< 2;i++)
{
jobject j=(*env)->GetObjectArrayElement(env,jobj,i);
jmethodID meth=(*env)->GetMethodID(env,dataClass,"setTimeStamp","(Ljava/lang/String;)V");//this gets the method id present in the class
if(meth==NULL){
printf("Method set is null");
}
jstring x = (*env)->NewStringUTF(env,"2013-12");
(*env)->CallObjectMethod(env,j,meth,x);//This is where I get Null Pointer
}
(*env)->DeleteLocalRef(env, dataClass);
return 0;
}
正如@Alex Cohn 和@immbis 所建议的那样,传递给 JNI 的数组未被填充,因此得到一个空指针
感谢 Alex Cohn 和 immbis 的建议。