使用JNI检索jint值时的随机值

时间:2013-01-17 15:12:04

标签: java c++ java-native-interface

我正在使用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,我能够正确地获取它。

2 个答案:

答案 0 :(得分: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工作了一段时间但是取消装箱可能无效。

答案 1 :(得分:0)

最后,我通过在Properties对象中添加Integer类型的Object并使用Integer类的intValue方法解析该值来实现它。这是我使用的代码。

的java:

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;