JNIEXPORT void JNICALL
Java_JniExample_org_1native_1call
(JNIEnv *env, jclass clazz, jobject obj) {
// Lookup the integer field ('intField') in 'obj'
// and get its value
jfieldID intFieldId = env->GetFieldID(clazz, "intField", "I");
if (id == 0) throw JNIException("Field not found");
int intFieldVal = env->GetIntField(obj, intFieldId);
// Lookup the static String field ('stringField') in 'obj',
// then convert the Java string representation
// to C++ type 'const char *'.
jfieldID strFieldId =
env->GetStaticFieldID(clazz, "stringField",
"Ljava/lang/String;");
if (id == 0) throw JNIException("Field not found");
jstring jstr =
(jstring) env->GetStaticObjectField(clazz, strFieldId);
const char *str =
(jstr == 0) ? 0 : env->GetStringUTFChars(jstr, 0);
// Lookup the integer array field ('intArray') in 'obj',
// then convert it to C++ type 'jint *'.
jfieldID arrFieldId =
env->GetFieldID(clazz, "intArray", "[I");
if (id == 0) throw JNIException("Field not found");
jintArray jarr =
(jintArray) env->GetObjectField(obj, arrFieldId);
jint *arr = env->GetIntArrayElements(jarr, 0);
// Set new values
env->SetIntField(obj, intFieldId, 0);
arr[0] = 0; arr[1] = 0;
env->SetStaticObjectField(clazz, strFieldId,
env->NewStringUTF("Good-bye, world!"));
// Explicitly release resources
env->ReleaseIntArrayElements(jarr, arr, 0);
env->ReleaseStringUTFChars(jstr, str);
}
End of Listing