'fatal error (JVM Crashed) while passing array of properties from c to java using jni
i want to read file and pass file contents from c to java using properties collection. I got " A fatal error has been detected by the Java Runtime Environment:" what would be the problem
C code
JNIEXPORT jobjectArray JNICALL Java_jniex2_view
(JNIEnv *env, jobject this){
fr=fopen("lmf.txt","r");
jclass cls_Properties = (*env)->FindClass(env,"java/util/Properties");
jmethodID mid_Properties_ctor = (*env)->GetMethodID(env,cls_Properties, "<init>", "()V");
jmethodID mid_Properties_put = (*env)->GetMethodID(env,cls_Properties, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
jstring title = (*env)->NewStringUTF(env,"title");
jstring author = (*env)->NewStringUTF(env,"searchtag");
jstring year = (*env)->NewStringUTF(env,"year");
jstring genre = (*env)->NewStringUTF(env,"genre");
jstring rating = (*env)->NewStringUTF(env,"rating");
jstring searchtag =(*env)->NewStringUTF(env,"searchtag");
int i=0,m=0;
while(fscanf(fr,"%[^:]:%s %s %s %s %s\n",s1,t1,a1,y2,g1,r1)!=EOF){
m++;
}
jobjectArray ret = (*env)->NewObjectArray(env,m, cls_Properties, 0);
while(fscanf(fr,"%[^:]:%s %s %s %s %s\n",s1,t1,a1,y2,g1,r1)!=EOF){
printf("%[^:]:%s %s %s %s %s\n",s1,t1,a1,y2,g1,r1);
jobject prop = (*env)->NewObject(env,cls_Properties, mid_Properties_ctor);
(*env)->PushLocalFrame(env,6);
(*env)->CallObjectMethod(env,prop, mid_Properties_put, title, (*env)->NewStringUTF(env,t1));
(*env)->CallObjectMethod(env,prop, mid_Properties_put, author, (*env)->NewStringUTF(env,a1));
(*env)->CallObjectMethod(env,prop, mid_Properties_put, year, (*env)->NewStringUTF(env,"2000"));
(*env)->CallObjectMethod(env,prop, mid_Properties_put, genre, (*env)->NewStringUTF(env,g1));
(*env)->CallObjectMethod(env,prop, mid_Properties_put, rating, (*env)->NewStringUTF(env,"4.5"));
(*env)->CallObjectMethod(env,prop, mid_Properties_put, searchtag, (*env)->NewStringUTF(env,s1));
prop = (*env)->PopLocalFrame(env,prop);
(*env)->SetObjectArrayElement(env,ret, i, prop);
i++;
}
fclose(fr);
return ret;
}
The java code that invokes view() funtion.
Java Code
public class jniex2{
public native Properties[] view();
static{
System.loadLibrary("hello1");
}
public static void main(String ar[])throws IOException,FileNotFoundException{
Properties[] records = jn.view();
for(Properties record:records){
System.out.println("title:"+record.getProperty("title"));
System.out.println("author:"+record.getProperty("author"));
System.out.println("year:"+record.getProperty("year"));
System.out.println("genre:"+record.getProperty("genre"));
System.out.println("rating:"+record.getProperty("rating"));
System.out.println("searchtag:"+record.getProperty("searchtag"));
System.out.println("");
}
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
