JNI学习积累之一 - - 常用函数大全(5)

2019-08-02 00:43

sig: 该属性的域签名。

返回值:属性ID。如果操作失败,则返回NULL。 抛出:NoSuchFieldError:如果找不到指定的域。

ExceptionInInitializerError:如果由于异常而导致类初始化程序失败。 OutOfMemoryError:如果系统内存不足。

GetField 例程

NativeType GetField (JNIEnv*env, jobject obj, jfieldID fieldID); 功能:该访问器例程系列返回对象的实例(非静态)域的值。要访问的域由通过调用GetFieldID() 而得到的域 ID 指定。 参数: env:JNI 接口指针。

obj:Java 对象(不能为 NULL)。 fieldID:有效的域 ID。 返回值: 属性的内容。

GetField 例程名 本地类型 GetObjectField() jobject GetBooleanField() jboolean GetByteField() jbyte GetCharField() jchar GetShortField() jshort GetIntField() jint GetLongField() jlong

GetFloatField() jfloat GetDoubleField() jdouble SetField 方法族

void SetField (JNIEnv *env, jobject obj, jfieldID fieldID, NativeType value);

功能: 该访问器例程系列设置对象的实例(非静态)属性的值。要访问的属性由通过调用SetFieldID() 而得到的属性 ID指定。 参数: env:JNI 接口指针。

obj:Java 对象(不能为 NULL)。 fieldID:有效的域 ID。 value:域的新值。

方法族 如下:

SetField 方法族 本地类型 SetObjectField() jobject SetBooleanField() jboolean SetByteField() jbyte SetCharField() jchar SetShortField() jshort SetIntField() jint SetLongField() jlong SetFloatField() jfloat SetDoubleField() jdouble

2、静态属性的访问 :也存在相同的方法,

jfieldID GetStaticFieldID (JNIEnv *env,jclass clazz, const char *name, const char *sig);

NativeType GetStaticField (JNIEnv*env,jclass classzz , jfieldID fieldID);

void SetStaticField (JNIEnv *env,jclassclasszz, jfieldID

fieldID, NativeType value);

它们与实例属性的唯一区别在于第二个参数jclass classzz代表的是类引用,而不是类实例。 3、调用实例方法

jmethodID GetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig);

功能:返回类或接口实例(非静态)方法的方法 ID。方法可在某个 clazz 的超类中定义,也可从 clazz 继承。该方法由其名称

和签名决定。 GetMethodID() 可使未初始化的类初始化。要获得构造函数的方法 ID,应将 作为方法名,同时将 void (V) 作为返回类型。 参数: env:JNI 接口指针。 clazz:Java 类对象。 name:方法名。 sig:方法的签名。

返回值: 方法 ID,如果找不到指定的方法,则为 NULL。 抛出:NoSuchMethodError:如果找不到指定方法。

ExceptionInInitializerError:如果由于异常而导致类初始化程序失败。 OutOfMemoryError:如果系统内存不足。

CallMethod 例程 、CallMethodA 例程 、CallMethodV 例程

NativeType CallMethod (JNIEnv*en v, jobject obj , jmethodID methodID, ...); //参数附加在函数后面,

NativeType CallMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args); //参数以指针形式附加

NativeType CallMethodV (JNIEnv *env, jobject obj,jmethodID methodID, va_list args); //参数以\链表\形式附加

说明:这三个操作的方法用于从本地方法调用Java 实例方法。它们的差别仅在于向其所调用的方法传递参数时所用的机制。

这三个操作将根据所指定的方法 ID 调用 Java 对象的实例(非静态)方法。参数 methodID 必须通过调用 GetMethodID()

来获得。当这些函数用于调用私有方法和构造函数时,方法 ID 必须从obj 的真实类派生而来,而不应从其某个超类派生。 当然,附加参数可以为空 。

参数: env:JNI 接口指针。

obj:Java 对象。

methodID:方法 ID。 返回值: 返回调用 Java 方法的结果。 抛出: 执行 Java 方法时抛出的异常。

下表根据结果类型说明了各个方法类型。用户应将CallMethod 中的 type 替换为所调用方法的Java 类型(或使用表

中的实际方法名),同时将 NativeType 替换为该方法相应的本地类型。省略掉了其他两种类型。

Java层返回值 方法本地返回类型NativeType

返回值为void : CallVoidMethod( ) A / V (无) 返回值为引用类型: CallObjectMethod( ) jobect

返回值为boolean : CallBooleanMethod( ) jboolean 返回值为byte : CallByteMethod( ) jbyte 返回值为char : CallCharMethod( ) jchar 返回值为short CallShortMethod( ) jshort 返回值为int : CallIntMethod( ) jint 返回值为long: CallLongMethod() jlong 返回值为float : CallFloatMethod() jfloat 返回值为double: CallDoubleMethod() jdouble 4、调用静态方法:也存在如下方法群,

jfieldID GetStaticMethodID (JNIEnv *env,jclass clazz, const char *name, const char *sig);


JNI学习积累之一 - - 常用函数大全(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:体育大课间活动安排表

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: