在native method中声明的参数类型,在JNI中都有对应的类型.
在Java中有两类数据类型:primitive types,如,int, float, char;另一种为
reference types,如,类,实例,数组。
Java与JNI基本类型的映射很直接,如下:
Java Language Type Native Type Description
boolean jboolean unsigned 8 bits
byte jbyte signed 8 bits
char jchar unsigned 16 bits
short jshort signed 16 bits
int jint signed 32 bits
long jlong signed 64 bits
float jfloat 32 bits
double jdouble 64 bits
Java类型 本地类型 JNI中定义的别名
相比基本类型,对象类型的传递要复杂很多。 Java层对象作为opaque references(指
针)传递到JNI层。 Opaque references是一种C的指针类型,它指向JavaVM内部数据结构。
使用这种指针的目的是:不希望JNI用户了解JavaVM内部数据结构。对Opaque reference
所指结构的操作,都要通过JNI方法进行. 比如,"java.lang.String"对象,JNI层对应的
类型为jstring,对该opaque reference的操作要通过JNIEnv->GetStringUTFChars进行。
引用的类型(Reference Types)
"JNI"包含一组引用类型,对应在"Java"编程中不同类别的引用类型。在继承关系中组织"JNI"引用类型显示如下(show below)
jobject (all objects)
|-- jclass (java.lang.Class instances)
|-- jstring (java.lang.String instances)
|-- jarray (arrays)
| |-- jobjectArray (Object[])
| |-- jbooleanArray (boolean[])
| |-- jbyteArray (byte[])
| |-- jcharArray (char[])
| |-- jshortArray (short[])
| |-- jintArray (int[])
| |-- jlongArray (long[])
| |-- jfloatArray (float[])
| |-- jdoubleArray (double[])
|-- jthrowable (java.lang.Throwable objects)
字符串操作 |
NewString |
jstring NewString(JNIEnv *env, const jchar *unicodeChars, |
jsize len); |
利用 Unicode字符数组构造新的 java.lang.String 对象。 |
参数: |
env:JNI接口指针。 |
unicodeChars:指向 Unicode 字符串的指针。 |
len:Unicode字符串的长度。 |
返回值: |
Java字符串对象。如果无法构造该字符串,则为 NULL。 |
抛出: |
OutOfMemoryError:如果系统内存不足。 |
GetStringLength |
jsize GetStringLength(JNIEnv *env, jstring string); |
返回 Java字符串的长度(Unicode字符数)。 |
参数: |
env:JNI接口指针。 |
string:Java字符串对象。 |
返回值: |
Java字符串的长度。 |
GetStringChars |
const jchar * GetStringChars(JNIEnv *env, jstring string, |
jboolean *isCopy); |
返回指向字符串的 Unicode字符数组的指针。该指针在调用 ReleaseStringchars() 前一直有效。 |
如果 isCopy 非空,则在复制完成后将 *isCopy 设为 JNI_TRUE。如果没有复制,则设为JNI_FALSE。 |
参数: |
env:JNI接口指针。 |
string:Java字符串对象。 |
isCopy:指向布尔值的指针。 |
返回值: |
指向 Unicode字符串的指针,如果操作失败,则返回NULL。 |
ReleaseStringChars |
void ReleaseStringChars(JNIEnv *env, jstring string, |
const jchar *chars); |
通知虚拟机平台相关代码无需再访问 chars。参数 chars 是一个指针,可通过 GetStringChars() 从 string 获得。 |
参数: |
env:JNI接口指针。 |
string:Java字符串对象。 |
chars:指向 Unicode 字符串的指针。 |
NewStringUTF |
jstring NewStringUTF(JNIEnv *env, const char *bytes); |
利用 UTF-8字符数组构造新 java.lang.String 对象。 |
参数: |
env:JNI接口指针。如果无法构造该字符串,则为 NULL。 |
bytes:指向 UTF-8 字符串的指针。 |
返回值: |
Java字符串对象。如果无法构造该字符串,则为 NULL。 |
抛出: |
OutOfMemoryError:如果系统内存不足。 |
GetStringUTFLength |
jsize GetStringUTFLength(JNIEnv *env, jstring string); |
以字节为单位返回字符串的 UTF-8长度。 |
参数: |
env:JNI接口指针。 |
string:Java字符串对象。 |
返回值: |
返回字符串的 UTF-8长度。 |
GetStringUTFChars |
const char* GetStringUTFChars(JNIEnv *env, jstring string, |
jboolean *isCopy); |
返回指向字符串的 UTF-8字符数组的指针。该数组在被ReleaseStringUTFChars() 释放前将一直有效。 |
如果 isCopy 不是 NULL,*isCopy 在复制完成后即被设为 JNI_TRUE。如果未复制,则设为 JNI_FALSE。 |
参数: |
env:JNI接口指针。 |
string:Java字符串对象。 |
isCopy:指向布尔值的指针。 |
返回值: |
指向 UTF-8字符串的指针。如果操作失败,则为 NULL。 |
ReleaseStringUTFChars |
void ReleaseStringUTFChars(JNIEnv *env, jstring string, |
const char *utf); |
通知虚拟机平台相关代码无需再访问 utf。utf 参数是一个指针,可利用 GetStringUTFChars() 从 string 获得。 |
参数: |
env:JNI接口指针。 |
string:Java字符串对象。 |
utf:指向 UTF-8 字符串的指针。 |
数组操作 |
||
GetArrayLength |
||
jsize GetArrayLength(JNIEnv *env, jarray array); |
||
返回数组中的元素数。 |
||
参数: |
||
env:JNI接口指针。 |
||
array:Java数组对象。 |
||
返回值: |
||
数组的长度。 |
||
NewObjectArray |
||
jarray NewObjectArray(JNIEnv *env, jsize length, |
||
jclass elementClass, jobject initialElement); |
||
构造新的数组,它将保存类 elementClass 中的对象。所有元素初始值均设为 initialElement。 |
||
参数: |
||
env:JNI接口指针。 |
||
length:数组大小。 |
||
elementClass:数组元素类。 |
||
initialElement:初始值。 |
||
返回值: |
||
Java数组对象。如果无法构造数组,则为 NULL。 |
||
抛出: |
||
OutOfMemoryError:如果系统内存不足。 |
||
GetObjectArrayElement |
||
jobject GetObjectArrayElement(JNIEnv *env, |
||
jobjectArray array, jsize index); |
||
返回 Object 数组的元素。 |
||
参数: |
||
env:JNI接口指针。 |
||
array:Java数组。 |
||
index:数组下标。 |
||
返回值: |
||
Java对象。 |
||
抛出: |
||
ArrayIndexOutOfBoundsException:如果 index 不是数组中的有效下标。 |
||
SetObjectArrayElement |
||
void SetObjectArrayElement(JNIEnv *env, jobjectArray array, |
||
jsize index, jobject value); |
||
设置 Object 数组的元素。 |
||
参数: |
||
env:JNI接口指针。 |
||
array:Java数组。 |
||
index:数组下标。 |
||
value:新值。 |
||
抛出: |
||
ArrayIndexOutOfBoundsException:如果 index 不是数组中的有效下标。 |
||
ArrayStoreException:如果 value 的类不是数组元素类的子类。 |
||
New<PrimitiveType>Array例程 |
||
ArrayType New<PrimitiveType>Array(JNIEnv*env, jsize length); |
||
用于构造新基本类型数组对象的一系列操作。表 4-8 说明了特定的基本类型数组构造函数。用户应把New<PrimitiveType>Array 替换为某个实际的基本类型数组构造函数例程名(见下表),然后将 ArrayType替换为该例程相应的数组类型。 |
||
表 4-8 New<PrimitiveType>Array数组构造函数系列 |
|
|
New<PrimitiveType>Array例程 |
数组类型 |
|
NewBooleanArray() |
jbooleanArray |
|
NewByteArray() |
jbyteArray |
|
NewCharArray() |
jcharArray |
|
NewShortArray() |
jshortArray |
|
NewIntArray() |
jintArray |
|
NewLongArray() |
jlongArray |
|
NewFloatArray() |
jfloatArray |
|
NewDoubleArray() |
jdoubleArray |
|
参数: |
||
env:JNI接口指针。 |
||
length:数组长度。 |
||
返回值: |
||
Java数组。如果无法构造该数组,则为 NULL。 |
Get<PrimitiveType>ArrayElements例程 |
||
NativeType *Get<PrimitiveType>ArrayElements(JNIEnv *env, |
||
ArrayType array, jboolean*isCopy); |
||
一组返回基本类型数组体的函数。结果在调用相应的 Release<PrimitiveType>ArrayElements()函数前将一直有效。由于返回的数组可能是 Java 数组的副本,因此对返回数组的更改不必在基本类型数组中反映出来,直到调用了Release<PrimitiveType>ArrayElements()。 |
||
如果 isCopy 不是 NULL,*isCopy 在复制完成后即被设为 JNI_TRUE。如果未复制,则设为 JNI_FALSE。 |
||
下表说明了特定的基本类型数组元素访问器。应进行下列替换; |
||
将 Get<PrimitiveType>ArrayElements 替换为表中某个实际的基本类型元素访问器例程名。 |
||
将 ArrayType 替换为对应的数组类型。 |
||
将 NativeType 替换为该例程对应的本地类型。 |
||
不管布尔数组在 Java虚拟机中如何表示,GetBooleanArrayElements() 将始终返回一个 jbooleans 类型的指针,其中每一字节代表一个元素(开包表示)。内存中将确保所有其它类型的数组为连续的。 |
||
表4-9 Get<PrimitiveType>ArrayElements访问器例程系列 |
|
|
Get<PrimitiveType>ArrayElements例程 |
数组类型 |
本地类型 |
GetBooleanArrayElements() |
jbooleanArray |
jboolean |
GetByteArrayElements() |
jbyteArray |
jbyte |
GetCharArrayElements() |
jcharArray |
jchar |
GetShortArrayElements() |
jshortArray |
jshort |
GetIntArrayElements() |
jintArray |
jint |
GetLongArrayElements() |
jlongArray |
jlong |
GetFloatArrayElements() |
jfloatArray |
jfloat |
GetDoubleArrayElements() |
jdoubleArray |
jdouble |
参数: |
||
env:JNI接口指针。 |
||
array:Java字符串对象。 |
||
isCopy:指向布尔值的指针。 |
||
返回值: |
||
返回指向数组元素的指针,如果操作失败,则为 NULL。 |
||
Release<PrimitiveType>ArrayElements例程 |
||
void Release<PrimitiveType>ArrayElements(JNIEnv *env, |
||
ArrayType array, NativeType *elems, jintmode); |
||
通知虚拟机平台相关代码无需再访问 elems 的一组函数。elems 参数是一个通过使用对应的Get<PrimitiveType>ArrayElements() 函数由 array 导出的指针。必要时,该函数将把对 elems 的修改复制回基本类型数组。 |
||
mode参数将提供有关如何释放数组缓冲区的信息。如果elems 不是 array 中数组元素的副本,mode将无效。否则,mode 将具有下表所述的功能: |
||
表 4-10基本类型数组释放模式 |
|
|
模式 |
动作 |
|
0 |
复制回内容并释放 elems 缓冲区 |
|
JNI_COMMIT |
复制回内容但不释放 elems 缓冲区 |
|
JNI_ABORT |
释放缓冲区但不复制回变化 |
|
多数情况下,编程人员将把“0”传给 mode 参数以确保固定的数组和复制的数组保持一致。其它选项可以使编程人员进一步控制内存管理,但使用时务必慎重。 |
||
下表说明了构成基本类型数组撤消程序系列的特定例程。应进行如下替换; |
||
将 Release<PrimitiveType>ArrayElements 替换为表 4-11 中的某个实际基本类型数组撤消程序例程名。 |
||
将 ArrayType 替换为对应的数组类型。 |
||
将 NativeType 替换为该例程对应的本地类型。 |
||
表 4-11 Release<PrimitiveType>ArrayElements数组例程系列 |
|
|
Release<PrimitiveType>ArrayElements例程 |
数组类型 |
本地类型 |
ReleaseBooleanArrayElements() |
jbooleanArray |
jboolean |
ReleaseByteArrayElements() |
jbyteArray |
jbyte |
ReleaseCharArrayElements() |
jcharArray |
jchar |
ReleaseShortArrayElements() |
jshortArray |
jshort |
ReleaseIntArrayElements() |
jintArray |
jint |
ReleaseLongArrayElements() |
jlongArray |
jlong |
ReleaseFloatArrayElements() |
jfloatArray |
jfloat |
ReleaseDoubleArrayElements() |
jdoubleArray |
jdouble |
参数: |
||
env:JNI接口指针。 |
||
array:Java数组对象。 |
||
elems:指向数组元素的指针。 |
||
mode:释放模式。 |
Get<PrimitiveType>ArrayRegion例程 |
||
void Get<PrimitiveType>ArrayRegion(JNIEnv *env, ArrayType array, |
||
jsize start, jsize len, NativeType *buf); |
||
将基本类型数组某一区域复制到缓冲区中的一组函数。 |
||
下表说明了特定的基本类型数组元素访问器。应进行如下替换: |
||
将 Get<PrimitiveType>ArrayRegion 替换为表 4-12 中的某个实际基本类型元素访问器例程名。 |
||
将 ArrayType 替换为对应的数组类型。 |
||
将 NativeType 替换为该例程对应的本地类型。 |
||
表 4-12 Get<PrimitiveType>ArrayRegion数组访问器例程系列 |
|
|
Get<PrimitiveType>ArrayRegion例程 |
数组类型 |
本地类型 |
GetBooleanArrayRegion() |
jbooleanArray |
jboolean |
GetByteArrayRegion() |
jbyteArray |
jbyte |
GetCharArrayRegion() |
jcharArray |
jchar |
GetShortArrayRegion() |
jshortArray |
jhort |
GetIntArrayRegion() |
jintArray |
jint |
GetLongArrayRegion() |
jlongArray |
jlong |
GetFloatArrayRegion() |
jfloatArray |
jloat |
GetDoubleArrayRegion() |
jdoubleArray |
jdouble |
参数: |
||
env:JNI接口指针。 |
||
array:Java指针。 |
||
start:起始下标。 |
||
len:要复制的元素数。 |
||
buf:目的缓冲区。 |
||
抛出: |
||
ArrayIndexOutOfBoundsException:如果区域中的某个下标无效。 |
||
Set<PrimitiveType>ArrayRegion例程 |
||
void Set<PrimitiveType>ArrayRegion(JNIEnv *env, ArrayType array, |
||
jsize start, jsize len, NativeType *buf); |
||
将基本类型数组的某一区域从缓冲区中复制回来的一组函数。 |
||
下表说明了特定的基本类型数组元素访问器。应进行如下替换: |
||
将 Set<PrimitiveType>ArrayRegion 替换为表中的实际基本类型元素访问器例程名。 |
||
将 ArrayType 替换为对应的数组类型。 |
||
将 NativeType 替换为该例程对应的本地类型。 |
||
表 4-13 Set<PrimitiveType>ArrayRegion数组访问器例程系列 |
|
|
Set<PrimitiveType>ArrayRegion例程 |
数组类型 |
本地类型 |
SetBooleanArrayRegion() |
jbooleanArray |
jboolean |
SetByteArrayRegion() |
jbyteArray |
jbyte |
SetCharArrayRegion() |
jcharArray |
jchar |
SetShortArrayRegion() |
jshortArray |
jshort |
SetIntArrayRegion() |
jintArray |
jint |
SetLongArrayRegion() |
jlongArray |
jlong |
SetFloatArrayRegion() |
jfloatArray |
jfloat |
SetDoubleArrayRegion() |
jdoubleArray |
jdouble |
参数: |
||
env:JNI接口指针。 |
||
array: Java 数组。 |
||
start:起始下标。 |
||
len:要复制的元素数。 |
||
buf:源缓冲区。 |
||
抛出: |
||
ArrayIndexOutOfBoundsException:如果区域中的某个下标无效。 |
||
访问对象的域
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetFieldID |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
jfieldID GetFieldID(JNIEnv *env, jclass clazz, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
const char *name, const char *sig); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回类的实例(非静态)域的域 ID。该域由其名称及签名指定。访问器函数的Get<type>Field 及 Set<type>Field 系列使用域 ID 检索对象域。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetFieldID() 将未初始化的类初始化。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetFieldID() 不能用于获取数组的长度域。应使用GetArrayLength()。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
参数: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
env:JNI接口指针。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
clazz:Java类对象。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
name:0终结的 UTF-8字符串中的域名。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sig:0终结的 UTF-8字符串中的域签名。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
域 ID。如果操作失败,则返回NULL。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
抛出: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NoSuchFieldError:如果找不到指定的域。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ExceptionInInitializerError:如果由于异常而导致类初始化程序失败。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OutOfMemoryError:如果系统内存不足。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Get<type>Field例程 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NativeType Get<type>Field(JNIEnv*env, jobject obj, jfieldID fieldID); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
该访问器例程系列返回对象的实例(非静态)域的值。要访问的域由通过调用GetFieldID() 而得到的域 ID 指定。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
下表说明了 Get<type>Field 例程名及结果类型。应将 Get<type>Field 中的 type 替换为域的 Java 类型(或使用表中的某个实际例程名),然后将NativeType 替换为该例程对应的本地类型。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
表 4-1 Get<type>Field访问器例程系列 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Get<type>Field例程名 |
本地类型 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetObjectField() |
jobject |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetBooleanField() |
jboolean |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetByteField() |
jbyte |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetCharField() |
jchar |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetShortField() |
jshort |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetIntField() |
jint |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetLongField() |
jlong |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetFloatField() |
jfloat |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GetDoubleField() |
jdouble |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
参数: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
env:JNI接口指针。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
obj:Java对象(不能为 NULL)。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fieldID:有效的域 ID。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
域的内容。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Set<type>Field例程 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
void Set<type>Field(JNIEnv *env, jobject obj, jfieldID fieldID, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NativeType value); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
该访问器例程系列设置对象的实例(非静态)域的值。要访问的域由通过调用SetFieldID() 而得到的域 ID 指定。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
下表说明了 Set<type>Field 例程名及结果类型。应将 Set<type>Field 中的 type 替换为域的 Java 类型(或使用表中的某个实际例程名),然后将NativeType 替换为该例程对应的本地类型。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
表4-2 Set<type>Field访问器例程系列 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Set<type>Field例程名 |
本地类型 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetObjectField() |
jobject |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetBooleanField() |
jboolean |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetByteField() |
jbyte |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetCharField() |
jchar |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetShortField() |
jshort |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetIntField() |
jint |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetLongField() |
jlong |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetFloatField() |
jfloat |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SetDoubleField() |
jdouble |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
参数: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
env:JNI接口指针。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
obj:Java对象(不能为 NULL)。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fieldID:有效的域 ID。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
value:域的新值。
|
Call<type>Method例程名 |
本地类型 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallVoidMethod() CallVoidMethodA() CallVoidMethodV() |
void |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallObjectMethod() CallObjectMethodA() CallObjectMethodV() |
jobject |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallBooleanMethod() CallBooleanMethodA() CallBooleanMethodV() |
jboolean |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallByteMethod() CallByteMethodA() CallByteMethodV() |
jbyte |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallCharMethod() CallCharMethodA() CallCharMethodV() |
jchar |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallShortMethod() CallShortMethodA() CallShortMethodV() |
jshort |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallIntMethod() CallIntMethodA() CallIntMethodV() |
jint |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallLongMethod() CallLongMethodA() CallLongMethodV() |
jlong |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallFloatMethod() CallFloatMethodA() CallFloatMethodV() |
jfloat |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
CallDoubleMethod() CallDoubleMethodA() CallDoubleMethodV() |
jdouble |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
参数: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
env:JNI接口指针。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
obj:Java对象。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
methodID:方法 ID。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Call<type>Method例程的其它参数: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
要传给 Java方法的参数。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Call<type>MethodA例程的其它参数: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
args:参数数组。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Call<type>MethodV例程的其它参数: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
args:参数的 va_list。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回值: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回调用 Java方法的结果。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
抛出: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
执行 Java方法时抛出的异常。
|
全局及局部引用 |
NewGlobalRef |
jobject NewGlobalRef(JNIEnv *env, jobject obj); |
创建 obj 参数所引用对象的新全局引用。obj 参数既可以是全局引用,也可以是局部引用。全局引用通过调用 DeleteGlobalRef() 来显式撤消。 |
参数: |
env:JNI接口指针。 |
obj:全局或局部引用。 |
返回值: |
返回全局引用。如果系统内存不足则返回 NULL。 |
DeleteGlobalRef |
void DeleteGlobalRef(JNIEnv *env, jobject globalRef); |
删除 globalRef 所指向的全局引用。 |
参数: |
env:JNI接口指针。 |
globalRef:全局引用。 |
DeleteLocalRef |
void DeleteLocalRef(JNIEnv *env, jobject localRef); |
删除 localRef所指向的局部引用。 |
参数: |
env:JNI接口指针。 |
localRef:局部引用。 |