私は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());
}
}
したがって、私がやろうとしているのは、各 Test オブジェクトが 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 値にマッピングしようとしましたが、それもうまくいきませんでした。