1

我正在使用 JNI 将“属性”类型的 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();

您调用的方法可能返回一个 Object 而不是一个 int,如果它是

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 回答