0
私は2つのフィールドを持つJavaクラスを持っています.1つはプライベートな最終ダブルで、もう1つはプライベートマップです。私はマップのパブリックゲッターメソッドを追加しました。私はJNIを使って自分のCコードからそれらにアクセスしています。私は、フィールドを経由して地図を取得して問題を有するが、メソッドを介してそれを得る何の問題もないのです。JNIを使用してフィールドにアクセスする
// The following lines of code work just fine
jclass jCls = (*env)->GetObjectClass(env,object);
jfieldID dblFldId = (*env)->GetFieldID(env,jCls,"nameOfDoubleVariable","D");
jdouble dblVar = (*env)->GetDoubleField(env, object, dblFldId);
// These lines don't work though
jfieldID mapId = (*env)->GetFieldID(env,jCls,"nameOfMapVariable","()Ljava/util/Map;");
jobject mapVar = (*env)->GetObjectField(env,object,mapId);
をしかし、私は基本的に私は経由してマップを取得しています(以下では動作しない2本のラインを交換する場合代わりに、直接フィールド経由)メソッドは、それが作業を行います。
jmethodID m_GetMap = (*env)->GetMethodID(env,jCls,"getMap","()Ljava/util/Map;");
jobject mapVar = (*env)->CallObjectMethod(env,object,m_GetMap);
誰もがメソッド呼び出しが動作する理由を教えたが、フィールドからそれを取得することはできません - 私は私が何か間違ったことをやっている確信しています!
おかげイシュトヴァーンPecznyikを - 時にはそれはちょうど目の第二の対:) – user1759789
user1759789道徳@がいることを要する:JNIは自分でシグネチャ補うためにしようとしないでください。 'javap -s'の出力を使用してください。決して間違ってはいません。 – EJP
EJPそれを作っていない - 私はその創造的ではない:)。後ろにビットをコピーして貼り付けてください!質問に答えるためにIstvan Pecznyikにもう一度感謝します! – user1759789