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