getまたはsetメソッドの呼び出しがクラッシュする。オブジェクト配列が有効です。 Jobs.Arrayに挿入中にエラーが発生しました。また、Jobjectから値を取得しようとしました。ゲッタとセッタが失敗します。JNIからJavaメソッドを呼び出すと、プログラムがクラッシュする
JNICodeは以下の通りです:
JNIEXPORT jint JNICALL Java_demo_JNIWrapper_pax_1store_1get_1data_1avail_1info
(JNIEnv *env, jclass jclass1, jobjectArray jobj)
{
.....
.....
int len = (*env)->GetArrayLength(env, jobj);
printf ("Incoming object array length = %d\n", len);// - - - > Works.. shows 2 (I am passing 2 objects)
jobject j = (*env)->GetObjectArrayElement(env, jobj,0);
printf("This line 1 \n ");
jmethodID meth1=(*env)->GetMethodID(env,jclass1,"getTimestamp","()Ljava/lang/String;");
printf("This line 2 \n "); // - - - - > Works..
jstring string_from_obj = (*env)->CallObjectMethod(env,j,meth1); // - - - - > Crashes..
printf("This line 3 \n "); // - - -> does not print this..
printf("Contents are =%s\n",(*env)->GetStringUTFChars(env, string_from_obj, 0));
............
}
私のJavaオブジェクトは以下の通りです:JNIへ
public class DataAvailable {
String timestamp;
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
}
コールは以下の通りです:
はpublic native int pax_store_get_data_avail_info(DataAvailable[] stats_array);
コードにエラーチェックを追加することを検討しましたか?すべての* JNIメソッドに無効な戻り値があるかどうかをチェックして、成功したと仮定するのではなく、適切な処置をとる必要があります。この場合、メソッドIDの値は何ですか? – EJP
その直面では、 'jclass1'は** DataAvailable **ではなく、** demo.JNIWrapper **です。 –
@EJPが尋ねたことを強調すると、 'jobject j'の値は何ですか?オブジェクト配列が 'null'要素を持っていて、簡単な' printf( "これは行2 \ n"); 'を出力することは可能です。これまでのコードの成功または失敗については何も教えてくれません。前のコード**はクラッシュしませんでした**。また、 'printf()'から 'stdout'には、バッファされているという点で問題があります。出力が見えないということは、必ずしもラインに到達していないことを意味するものではなく、単に出力されなかったことを意味します。バッファがフラッシュされる前にプロセスがクラッシュした場合、出力は表示されません。 –