1

JNI を使用して、「Properties」タイプの Java オブジェクトを c++ に渡しています。

次のステートメントを使用して、Properties オブジェクトに挿入された int 値を取得します。

int intVal = 1;
Properties propObj = new Properties();
propObj.put("KEY_FOR_INT", intVal);

次のステートメントで JNI を使用して c++ で値を取得しようとすると、ランダムな値が取得されます。

jint intValueFromJava = env->CallIntMethod(propObj, propGetID, env->NewStringUTF("KEY_FOR_INT"));

文字列値または ArrayList を取得しようとすると、正しく取得できます。

4

2 に答える 2

1

呼び出し後に例外が発生したかどうかを確認してください

jint intValueFromJava = env->CallIntMethod(propObj, propGetID, env->NewStringUTF("KEY_FOR_INT"));
jthrowable exc = env->ExceptionOccurred();

呼び出しているメソッドが int ではなく Object を返す可能性があります。

public synchronized V get(Object key);

jni ではしばらく機能しませんでしたが、ボックス化解除が機能しない可能性があります。

于 2013-01-17T16:40:48.373 に答える
0

最後に、Properties オブジェクトに Integer 型の Object を追加して動作させ、Integer クラスの intValue メソッドを使用して値を解析しました。これが私が使用したコードです。

ジャバ:

int intVal = 1;
Properties propObj = new Properties();
propObj.put("KEY_FOR_INT", new Integer(intVal));

c++:

jobject intObjVal = env->CallObjectMethod(propObj, propGetID, env->NewStringUTF("KEY_FOR_INT"));
jint intVal = env->CallIntMethod(intObjVal, intValueID);
int myRequiredVal = (int)intVal;
于 2013-01-17T16:52:54.703 に答える