java JNI编程指南

内容发布更新时间 : 2025/6/10 14:59:58星期一 下面是文章的全部内容请认真阅读。

/* Access the static field si */

si = (*env)->GetStaticIntField(env, cls, fid); printf(\ (*env)->SetStaticIntField(env, cls, fid, 200); }

运行程序可得到输出结果:

In C:

StaticFieldAccess.si = 100 In Java:

StaticFieldAccess.si = 200

访问静态字段和对象实例字段的不同点:

1、 访问静态字段使用GetStaticFieldID,而访问对象的实例字段使用

GetFieldID,但是,这两个方法都有相同的返回值类型:jfieldID。

4.2 调用方法

JAVA中有几种不同类型的方法,实例方法必须在一个类的某个对象实例上面调用。而静态方法可以在任何一个对象实例上调用。对于构建方法的调用我们推迟到下一节。

JNI支持一系列完整的函数让你可以在本地代码中回调JAVA方法,下面例子演示了如何从本地代码中调用一个JAVA中的实例方法:

class InstanceMethodCall {

private native void nativeMethod(); private void callback() {

System.out.println(\ }

public static void main(String args[]) {

InstanceMethodCall c = new InstanceMethodCall(); c.nativeMethod(); }

static {

System.loadLibrary(\ } }

下面的是本地方法的实现:

JNIEXPORT void JNICALL

Java_InstanceMethodCall_nativeMethod(JNIEnv *env, jobject obj) {

jclass cls = (*env)->GetObjectClass(env, obj); jmethodID mid =

(*env)->GetMethodID(env, cls, \ if (mid == NULL) {

return; /* method not found */ }

printf(\

(*env)->CallVoidMethod(env, obj, mid); }

运行程序,得到如下输出:

In C

In Java

4.2.1 调用实例方法

本地方法Java_InstanceMethodCall_nativeMethod的实现演示了在本地代码中调用JAVA方法的两步:

1、 本地方法首先调用JNI函数GetMethodID。这个函数在指定的类中寻找相应的方法。这个寻找过程是基于方法描述符的。如果方法不存在,GetMethodID返回NULL。这时,立即从本地方法中返回,并引发一个NoSuchMethodError错误。

2、 本地方法通过调用CallVoidMethod来调用返回值为void的实例方法。

除了CallVoidMethod这个函数以外,J

>>灞曞紑鍏ㄦ枃<<
12@gma联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi