我正在尝试学习 jni,我想知道如何制作它,以便 java 对象可以在 jni c++ 层中具有一些与之关联的值。目前我有这个java代码。
public class Test
{
static
{
Runtime.getRuntime().loadLibrary("JNITests");
}
public native void setValue(int value);
public native int getValue();
public static void main(String[] args)
{
Test test1 = new Test();
test1.setValue(34);
Test test2 = new Test();
test2.setValue(23);
System.out.println(test1.getValue());
}
}
所以我想做的是让每个测试对象使用setValue在jni中存储一个值并使用这个c++代码获取getValue。
#include <jni.h>
#include "Test.h"
int value;
JNIEXPORT void JNICALL Java_Test_setValue(JNIEnv *, jobject, jint newValue)
{
value = newValue;
}
JNIEXPORT jint JNICALL Java_Test_getValue(JNIEnv *, jobject)
{
return value;
}
但是,问题是当我在 test2 上使用 setValue 然后我打印 test1 的值时,它已更改为我将 test2 设置为的值。我该如何解决。我尝试将每个 jobject 映射到一个 int 值,但这也不起作用。