java — случайные значения при получении значения jint с использованием JNI

Я передаю Java-объект типа «Свойства» в C ++, используя JNI.

Я получаю значение типа int, которое вставляется в объект Properties с помощью следующих операторов.

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

Когда я пытаюсь получить значение в c ++, используя JNI с помощью следующего оператора, я получаю случайные значения.

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

Если я пытаюсь получить строковое значение или ArrayList, я могу получить его правильно.

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

Другие решения

Наконец, я заработал, добавив Object типа Integer в объект Properties и проанализировал значение, используя метод intValue класса Integer. Вот код, который я использовал.

Джава:

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;
0

По вопросам рекламы [email protected]