Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий |
Эта глава служит ссылочным разделом для функций JNI. Это обеспечивает полный список всех функций JNI. Это также представляет точное расположение таблицы функции JNI.
Отметьте использование термина "должный", чтобы описать ограничения на программистов JNI. Например, когда Вы видите, что определенная функция JNI должна получить НЕНУЛЕВОЙ объект, это - Ваша обязанность гарантировать, что НУЛЬ не передают к той функции JNI. В результате реализация JNI не должна выполнить регистрации Нулевого указателя той функции JNI.
Часть этой главы адаптируется из документации Netscape JRI.
Ссылочные группы материала функционируют своим использованием. Ссылочный раздел организуется следующими функциональными областями:
Каждая функция доступна при фиксированном смещении через параметр JNIEnv. Тип JNIEnv является указателем на структуру, хранящую все указатели функции JNI. Это определяется следующим образом:
VM инициализирует функциональную таблицу, как показано Примером кода 4-1. Отметьте, что первые три записи резервируются для будущей совместимости с COM. Кроме того, мы резервируем много дополнительные NULL
записи около начала функциональной таблицы, так, чтобы, например, будущий class связанная работа JNI могла быть добавлена после FindClass, а не в конце таблицы.
Отметьте, что функциональная таблица может быть совместно использована среди всех указателей на интерфейс JNI.
const struct JNINativeInterface ... = { NULL, NULL, NULL, NULL, GetVersion, DefineClass, FindClass, FromReflectedMethod, FromReflectedField, ToReflectedMethod, GetSuperclass, IsAssignableFrom, ToReflectedField, Throw, ThrowNew, ExceptionOccurred, ExceptionDescribe, ExceptionClear, FatalError, PushLocalFrame, PopLocalFrame, NewGlobalRef, DeleteGlobalRef, DeleteLocalRef, IsSameObject, NewLocalRef, EnsureLocalCapacity, AllocObject, NewObject, NewObjectV, NewObjectA, GetObjectClass, IsInstanceOf, GetMethodID, CallObjectMethod, CallObjectMethodV, CallObjectMethodA, CallBooleanMethod, CallBooleanMethodV, CallBooleanMethodA, CallByteMethod, CallByteMethodV, CallByteMethodA, CallCharMethod, CallCharMethodV, CallCharMethodA, CallShortMethod, CallShortMethodV, CallShortMethodA, CallIntMethod, CallIntMethodV, CallIntMethodA, CallLongMethod, CallLongMethodV, CallLongMethodA, CallFloatMethod, CallFloatMethodV, CallFloatMethodA, CallDoubleMethod, CallDoubleMethodV, CallDoubleMethodA, CallVoidMethod, CallVoidMethodV, CallVoidMethodA, CallNonvirtualObjectMethod, CallNonvirtualObjectMethodV, CallNonvirtualObjectMethodA, CallNonvirtualBooleanMethod, CallNonvirtualBooleanMethodV, CallNonvirtualBooleanMethodA, CallNonvirtualByteMethod, CallNonvirtualByteMethodV, CallNonvirtualByteMethodA, CallNonvirtualCharMethod, CallNonvirtualCharMethodV, CallNonvirtualCharMethodA, CallNonvirtualShortMethod, CallNonvirtualShortMethodV, CallNonvirtualShortMethodA, CallNonvirtualIntMethod, CallNonvirtualIntMethodV, CallNonvirtualIntMethodA, CallNonvirtualLongMethod, CallNonvirtualLongMethodV, CallNonvirtualLongMethodA, CallNonvirtualFloatMethod, CallNonvirtualFloatMethodV, CallNonvirtualFloatMethodA, CallNonvirtualDoubleMethod, CallNonvirtualDoubleMethodV, CallNonvirtualDoubleMethodA, CallNonvirtualVoidMethod, CallNonvirtualVoidMethodV, CallNonvirtualVoidMethodA, GetFieldID, GetObjectField, GetBooleanField, GetByteField, GetCharField, GetShortField, GetIntField, GetLongField, GetFloatField, GetDoubleField, SetObjectField, SetBooleanField, SetByteField, SetCharField, SetShortField, SetIntField, SetLongField, SetFloatField, SetDoubleField, GetStaticMethodID, CallStaticObjectMethod, CallStaticObjectMethodV, CallStaticObjectMethodA, CallStaticBooleanMethod, CallStaticBooleanMethodV, CallStaticBooleanMethodA, CallStaticByteMethod, CallStaticByteMethodV, CallStaticByteMethodA, CallStaticCharMethod, CallStaticCharMethodV, CallStaticCharMethodA, CallStaticShortMethod, CallStaticShortMethodV, CallStaticShortMethodA, CallStaticIntMethod, CallStaticIntMethodV, CallStaticIntMethodA, CallStaticLongMethod, CallStaticLongMethodV, CallStaticLongMethodA, CallStaticFloatMethod, CallStaticFloatMethodV, CallStaticFloatMethodA, CallStaticDoubleMethod, CallStaticDoubleMethodV, CallStaticDoubleMethodA, CallStaticVoidMethod, CallStaticVoidMethodV, CallStaticVoidMethodA, GetStaticFieldID, GetStaticObjectField, GetStaticBooleanField, GetStaticByteField, GetStaticCharField, GetStaticShortField, GetStaticIntField, GetStaticLongField, GetStaticFloatField, GetStaticDoubleField, SetStaticObjectField, SetStaticBooleanField, SetStaticByteField, SetStaticCharField, SetStaticShortField, SetStaticIntField, SetStaticLongField, SetStaticFloatField, SetStaticDoubleField, NewString, GetStringLength, GetStringChars, ReleaseStringChars, NewStringUTF, GetStringUTFLength, GetStringUTFChars, ReleaseStringUTFChars, GetArrayLength, NewObjectArray, GetObjectArrayElement, SetObjectArrayElement, NewBooleanArray, NewByteArray, NewCharArray, NewShortArray, NewIntArray, NewLongArray, NewFloatArray, NewDoubleArray, GetBooleanArrayElements, GetByteArrayElements, GetCharArrayElements, GetShortArrayElements, GetIntArrayElements, GetLongArrayElements, GetFloatArrayElements, GetDoubleArrayElements, ReleaseBooleanArrayElements, ReleaseByteArrayElements, ReleaseCharArrayElements, ReleaseShortArrayElements, ReleaseIntArrayElements, ReleaseLongArrayElements, ReleaseFloatArrayElements, ReleaseDoubleArrayElements, GetBooleanArrayRegion, GetByteArrayRegion, GetCharArrayRegion, GetShortArrayRegion, GetIntArrayRegion, GetLongArrayRegion, GetFloatArrayRegion, GetDoubleArrayRegion, SetBooleanArrayRegion, SetByteArrayRegion, SetCharArrayRegion, SetShortArrayRegion, SetIntArrayRegion, SetLongArrayRegion, SetFloatArrayRegion, SetDoubleArrayRegion, RegisterNatives, UnregisterNatives, MonitorEnter, MonitorExit, GetJavaVM, GetStringRegion, GetStringUTFRegion, GetPrimitiveArrayCritical, ReleasePrimitiveArrayCritical, GetStringCritical, ReleaseStringCritical, NewWeakGlobalRef, DeleteWeakGlobalRef, ExceptionCheck, NewDirectByteBuffer, GetDirectBufferAddress, GetDirectBufferCapacity, GetObjectRefType };
jint GetVersion(JNIEnv *env);
Возвращает версию собственного интерфейса метода.
Индексируйте 4 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
Возвращает номер основной версии в более высоких 16 битах и номер вспомогательной версии в более низких 16 битах.
В JDK/JRE 1.1, GetVersion()
возвраты 0x00010001
.
В JDK/JRE 1.2, GetVersion()
возвраты 0x00010002
.
В JDK/JRE 1.4, GetVersion()
возвраты 0x00010004
.
В JDK/JRE 1.6, GetVersion()
возвраты 0x00010006
.
#define JNI_VERSION_1_1 0x00010001 #define JNI_VERSION_1_2 0x00010002 /* Error codes */ #define JNI_EDETACHED (-2) /* thread detached from the VM */ #define JNI_EVERSION (-3) /* JNI version error
#define JNI_VERSION_1_4 0x00010004
#define JNI_VERSION_1_6 0x00010006
jclass DefineClass(JNIEnv *env, const char *name, jobject loader,
const jbyte *buf, jsize bufLen);
Загружает class из буфера необработанных данных class. На буфер, содержащий необработанные данные class, не ссылается VM после возвратов вызова DefineClass, и это может быть отброшено при желании.
Индексируйте 5 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
name
: имя class или интерфейса, который будет определен. Строка кодируется в измененном UTF-8.
loader
: загрузчик class, присвоенный определенному class.
buf
: буфер, содержащий .class
данные файла.
bufLen
: буферная длина.
Возвращает Java объект class или NULL
если ошибка происходит.
ClassFormatError
: если данные class не определяют допустимый class.
ClassCircularityError
: если бы class или интерфейс были бы своим собственным суперклассом или суперинтерфейсом.
OutOfMemoryError
: если система исчерпывает память.
SecurityException
: если вызывающая сторона пытается определить class в дереве пакета "java".
jclass FindClass(JNIEnv *env, const char *name);
В выпуске 1.1 JDK эта функция загружает локально определенный class. Это ищет каталоги и файлы zip, определенные CLASSPATH
переменная окружения для class с указанным именем.
Начиная с Java 2 выпуска 1.2 SDK модель обеспечения безопасности Java позволяет несистемным классам загружать и вызывать собственные методы. FindClass
определяет местоположение загрузчика class, связанного с текущим собственным методом; то есть, загрузчик class class, который объявил собственный метод. Если собственный метод будет принадлежать системе class, то никакой загрузчик class не будет включен. Иначе, надлежащий загрузчик class будет вызван, чтобы загрузить и соединить именованный class.
Начиная с Java 2 выпуска 1.2 SDK, когда FindClass
вызывается через Интерфейс Вызова, нет никакого текущего собственного метода или его связанного загрузчика class. В этом случае, результат ClassLoader.getSystemClassLoader
используется. Это - загрузчик class, который виртуальная машина создает для приложений, и в состоянии определить местоположение классов, перечисленных в java.class.path
свойство.
name
параметром является полностью определенное имя class или подпись типа массива. Например, полностью определенное имя class для java.lang.String
class:
"java/lang/String"
Подпись типа массива массива class java.lang.Object[]
:
"[Ljava/lang/Object;"
Индексируйте 6 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
name
: полностью определенное имя class (то есть, имя пакета, разграниченное“/
”, сопровождаемый именем class). Если имя начинается“[
“(символ подписи массива), это возвращает массив class. Строка кодируется в измененном UTF-8.
Возвращает объект class из полностью определенного имени, или NULL
если class не может быть найден.
ClassFormatError
: если данные class не определяют допустимый class.
ClassCircularityError
: если бы class или интерфейс были бы своим собственным суперклассом или суперинтерфейсом.
NoClassDefFoundError
: если никакое определение для требуемого class или интерфейса не может быть найдено.
OutOfMemoryError
: если система исчерпывает память.
jclass GetSuperclass(JNIEnv *env, jclass clazz);
Если clazz
представляет любой class кроме class Object
, тогда эта функция возвращает объект, который представляет суперкласс class, определенного clazz
.
Если clazz
определяет class Object
, или clazz
представляет интерфейс, эта функция возвраты NULL
.
Индексируйте 10 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
Возвращает суперкласс class, представленного clazz
, или NULL
.
jboolean IsAssignableFrom(JNIEnv *env, jclass clazz1,
jclass clazz2);
Определяет ли объект clazz1
может быть безопасно брошен к clazz2
.
Индексируйте 11 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz1
: первый параметр class.
clazz2
: второй параметр class.
Возвраты JNI_TRUE
если любое из следующего является истиной:
jint Throw(JNIEnv *env, jthrowable obj);
Причины a java.lang.Throwable
объект, который будет брошен.
Индексируйте 13 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
obj
: a java.lang.Throwable
объект.
Возвраты 0 на успехе; отрицательная величина при отказе.
java.lang.Throwable
object
obj
.
jint ThrowNew(JNIEnv *env, jclass clazz,
const char *message);
Создает объект исключения из указанного class с сообщением, определенным message
и причины, что исключение, которое будет брошено.
Индексируйте 14 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: подкласс java.lang.Throwable
.
message
: сообщение, используемое, чтобы создать java.lang.Throwable
объект. Строка кодируется в измененном UTF-8.
Возвраты 0 на успехе; отрицательная величина при отказе.
недавно созданный java.lang.Throwable
объект.
jthrowable ExceptionOccurred(JNIEnv *env);
Определяет, выдается ли исключение. Исключение остается брошенным до любого вызовы собственного кода ExceptionClear()
, или код Java обрабатывает исключение.
Индексируйте 15 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
Возвращает объект исключения, который находится в настоящий момент в процессе того, чтобы быть брошенным, или NULL
если никакое исключение в настоящий момент не выдается.
void ExceptionDescribe(JNIEnv *env);
Печатает исключение и след стека к системному каналу сообщения об ошибке, такой как stderr
. Это - подпрограмма удобства, предусмотрел отладку.
Индексируйте 16 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
void ExceptionClear(JNIEnv *env);
Очищает любое исключение, которое в настоящий момент выдается. Если никакое исключение в настоящий момент не выдается, эта подпрограмма не имеет никакого эффекта.
Индексируйте 17 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
void FatalError(JNIEnv *env, const char *msg);
Повышает фатальную ошибку и не ожидает, что VM восстановится. Эта функция не возвращается.
Индексируйте 18 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
msg
: сообщение об ошибке. Строка кодируется в измененном UTF-8.
jboolean ExceptionCheck(JNIEnv *env);
Возвраты JNI_TRUE
когда есть исключение на ожидании; иначе, возвраты JNI_FALSE
.
JDK/JRE 1.2
jobject NewGlobalRef(JNIEnv *env, jobject obj);
Создает новую глобальную ссылку на объект, упомянутый obj
параметр. obj
параметром может быть глобальная или локальная ссылка. От глобальных ссылок нужно явно избавиться, вызывая DeleteGlobalRef()
.
Индексируйте 21 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
obj
: глобальная или локальная ссылка.
Возвращает глобальную ссылку, или NULL
если система исчерпывает память.
void DeleteGlobalRef(JNIEnv *env, jobject globalRef);
Удаляет глобальную ссылку, которой указывают globalRef
.
Индексируйте 22 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
globalRef
: глобальная ссылка.
Локальные ссылки допустимы для продолжительности собственного вызова метода. Они освобождаются автоматически после собственных возвратов метода. Каждая локальная ссылка стоит некоторого количества ресурса виртуальной машины Java. Программисты должны удостовериться, что собственные методы не чрезмерно выделяют локальные ссылки. Хотя локальные ссылки автоматически освобождаются после того, как собственный метод возвращается к Java, чрезмерное выделение локальных ссылок может заставить VM исчерпывать память во время выполнения собственного метода.
void DeleteLocalRef(JNIEnv *env, jobject localRef);
Удаляет локальную ссылку, которой указывают localRef
.
Индексируйте 23 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
localRef
: локальная ссылка.
ОтметитьJDK/JRE 1.1 обеспечивает С JDK/JRE 1.2 дополнительный набор функций обеспечиваются для локального ссылочного управления временем жизни. Они - четыре упомянутые ниже функции. |
jint EnsureLocalCapacity(JNIEnv *env, jint capacity);
Гарантирует, что, по крайней мере, данное число локальных ссылок может быть создано в текущем потоке. Возвраты 0 на успехе; иначе возвращает отрицательное число и бросает OutOfMemoryError
.
Прежде, чем это введет собственный метод, VM автоматически гарантирует, что могут быть созданы по крайней мере 16 локальных ссылок.
Для обратной совместимости VM выделяет локальные ссылки вне обеспеченной емкости. (Как поддержка отладки, VM может дать пользовательские предупреждения, что создаются слишком много локальных ссылок. В JDK программист может предоставить -verbose:jni
параметр командной строки, чтобы включить эти сообщения.) Вызовы VM FatalError
если больше локальных ссылок не может быть создано вне обеспеченной емкости.
JDK/JRE 1.2
jint PushLocalFrame(JNIEnv *env, jint capacity);
Создает новый локальный ссылочный фрейм, в котором может быть создано, по крайней мере, данное число локальных ссылок. Возвраты 0 на успехе, отрицательном числе и ожидании OutOfMemoryError
при отказе.
Отметьте, что локальные ссылки, уже создаваемые в предыдущих локальных фреймах, все еще допустимы в текущем локальном фрейме.
JDK/JRE 1.2
jobject PopLocalFrame(JNIEnv *env, jobject result);
Появляется от текущего локального ссылочного фрейма, освобождает все локальные ссылки, и возвращает локальную ссылку в предыдущем локальном ссылочном фрейме для данного result
объект.
Передача NULL
как result
если Вы не должны возвратить ссылку на предыдущий фрейм.
JDK/JRE 1.2
jobject NewLocalRef(JNIEnv *env, jobject ref);
Создает новую локальную ссылку, которая обращается к тому же самому объекту как ref
. Данный ref
может быть глобальная или локальная ссылка. Возвраты NULL
если ref
обращается к null
.
JDK/JRE 1.2
NULL
. Программисты могут обнаружить ли слабые глобальные контрольные точки к освобожденному объекту при использовании IsSameObject
сравнить слабую ссылку с NULL
. Слабые глобальные ссылки в JNI являются упрощенной версией Слабых ссылок Java, доступных как часть Java 2 API Платформы ( java.lang.ref
пакет и его классы).
Разъяснение (добавленный июнь 2001)
Так как сборка "мусора" может произойти, в то время как собственные методы работают, объекты, упомянутые слабыми глобальными ссылками, могут быть освобождены в любое время. В то время как слабые глобальные ссылки могут использоваться, где глобальные ссылки используются, обычно неуместно сделать так, поскольку они могут стать функционально эквивалентными NULL
без уведомления.
В то время как IsSameObject
может использоваться, чтобы определить, обращается ли слабая глобальная ссылка к освобожденному объекту, она не препятствует объекту быть освобожденным сразу после того. Следовательно, программисты, возможно, не полагаются на эту проверку, чтобы определить, может ли слабая глобальная ссылка используемый (как не -NULL
ссылка) в любом будущем вызове функции JNI.
Чтобы преодолеть это свойственное ограничение, рекомендуется, чтобы стандарт (strong) локальная или глобальная ссылка на тот же самый объект был получен, используя функции JNI NewLocalRef
или NewGlobalRef
, и что эта ссылка strong использоваться, чтобы получить доступ к намеченному объекту. Эти функции возвратятся NULL
если объект был освобожден, и иначе возвратит ссылку strong (который будет препятствовать объекту быть освобожденным). Новая ссылка должна быть явно удалена, когда немедленный доступ к объекту больше не требуется, позволяя объект быть освобожденным.
Слабая глобальная ссылка более слаба чем другие типы слабых ссылок (объекты Java классов SoftReference или WeakReference). Слабая глобальная ссылка на конкретную цель не будет становиться функционально эквивалентной NULL
пока SoftReference или объектам WeakReference, обращающимся к той же самой конкретной цели, не очистили их ссылки.
Слабая глобальная ссылка более слаба чем внутренние ссылки Java на объекты, требующие завершения. Слабая глобальная ссылка не будет становиться функционально эквивалентной
NULL
до окончания завершения финализатора для объекта, на который ссылаются, если существующий.
Взаимодействия между слабыми глобальными ссылками и PhantomReferences неопределены. В частности реализации Java VM может (или не может) обрабатывать слабые глобальные ссылки после PhantomReferences, и это может (или не может), будьте возможны, чтобы использовать слабые глобальные ссылки, чтобы держаться за объекты, который также упоминаетесь объектами PhantomReference. Этого неопределенного использования слабых глобальных ссылок нужно избежать.
jweak NewWeakGlobalRef(JNIEnv *env, jobject obj);
Создает новую слабую глобальную ссылку. Возвраты NULL
если obj
обращается к null
, или если VM исчерпывает память. Если VM исчерпывает память, OutOfMemoryError
будет брошен.
JDK/JRE 1.2
void DeleteWeakGlobalRef(JNIEnv *env, jweak obj);
Удалите ресурсы VM, необходимые для данной слабой глобальной ссылки.
jobject AllocObject(JNIEnv *env, jclass clazz);
Выделяет новый объект Java, не вызывая ни одного из конструкторов для объекта. Возвращает ссылку на объект.
clazz параметр не должен отослать к массиву class.
Индексируйте 27 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
Возвращает объект Java, или NULL
если объект не может быть создан.
InstantiationException
: если class является интерфейсом или абстрактным class.
OutOfMemoryError
: если система исчерпывает память.
jobject NewObject(JNIEnv *env, jclass clazz,
jmethodID methodID, ...);
jobject NewObjectA(JNIEnv *env, jclass clazz,
jmethodID methodID, const jvalue *args);
jobject NewObjectV(JNIEnv *env, jclass clazz,
jmethodID methodID, va_list args);
Создает новый объект Java. ID метода указывает который метод конструктора вызвать. Этот ID должен быть получен, вызывая GetMethodID()
с <init>
как имя метода и void
(V
) как тип возврата.
clazz
параметр не должен отослать к массиву class.
Программисты помещают все параметры, которые нужно сразу передать конструктору после methodID
параметр. NewObject()
принимает эти параметры и передает их к методу Java, который программист хочет вызвать.
Индексируйте 28 в таблице функции интерфейса JNIEnv.
Программисты помещают все параметры, которые нужно передать конструктору в args
массив jvalues
это сразу следует methodID
параметр. NewObjectA()
принимает параметры в этом массиве, и, поочередно, передает их к методу Java, который программист хочет вызвать.
Индексируйте 30 в таблице функции интерфейса JNIEnv.
Программисты помещают все параметры, которые нужно передать конструктору в args
параметр типа va_list
это сразу следует methodID
параметр. NewObjectV()
принимает эти параметры, и, поочередно, передает их к методу Java, который программист хочет вызвать.
Индексируйте 29 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
methodID
: ID метода конструктора.
параметры конструктору.
args
: массив параметров конструктору.
args
: va_list параметров конструктору.
Возвращает объект Java, или NULL
если объект не может быть создан.
InstantiationException
: если class является интерфейсом или абстрактным class.
OutOfMemoryError
: если система исчерпывает память.
Любые исключения, выданные конструктором.
jclass GetObjectClass(JNIEnv *env, jobject obj);
Возвращает class объекта.
Индексируйте 31 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
obj
: объект Java (не должен быть NULL
).
Возвращает Java объект class.
jobjectRefType GetObjectRefType(JNIEnv* env, jobject obj);
Возвращает тип объекта, упомянутого obj
параметр. Параметр obj
может или быть локальная, глобальная или слабая глобальная ссылка.
Индексируйте 232 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
obj
: локальная, глобальная или слабая глобальная ссылка.
vm
: экземпляр виртуальной машины, от которого будет получен интерфейс.
env
: указатель на расположение, куда указатель на интерфейс JNI для текущего потока будет помещен.
version
: требуемая версия JNI.
Функция GetObjectRefType
возвраты одно из следующих перечисляемых значений, определенных как a jobjectRefType
:
JNIInvalidRefType = 0,
JNILocalRefType = 1,
JNIGlobalRefType = 2,
JNIWeakGlobalRefType = 3
Если параметр obj
слабый глобальный ссылочный тип, возврат будет JNIWeakGlobalRefType
.
Если параметр obj
глобальный ссылочный тип, возвращаемое значение будет JNIGlobalRefType
.
Если параметр obj
локальный ссылочный тип, возврат будет JNILocalRefType
.
Если obj
параметром не является допустимая ссылка, возвращаемое значение для этой функции будет JNIInvalidRefType
.
Недопустимая ссылка является ссылкой, которая не является допустимым дескриптором. Таким образом, obj
адрес указателя не указывает на расположение в памяти, которая была выделена от одного из Касательно функций создания или возвращена из функции JNI.
Также, NULL
была бы недопустимая ссылка и GetObjectRefType(env,NULL)
возвратился бы JNIInvalidRefType
.
С другой стороны нулевая ссылка, которая является ссылкой, которая указывает на нуль, возвратила бы тип ссылки, что нулевая ссылка первоначально создавалась как.
GetObjectRefType
не может использоваться на удаленных ссылках.
Так как ссылки обычно реализуются как указатели на структуры данных памяти, которые могут потенциально быть снова использованы любой из ссылочных служб выделения в VM, когда-то удаленном, он не определяется что значение GetObjectRefType
возвратится.
JDK/JRE 1.6
jboolean IsInstanceOf(JNIEnv *env, jobject obj,
jclass clazz);
Тесты, является ли объект экземпляром class.
Индексируйте 32 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
obj
: объект Java.
clazz
: Java объект class.
Возвраты JNI_TRUE
если obj
может быть брошен к clazz
; иначе, возвраты JNI_FALSE
. A NULL
объект может быть брошен к любому class.
jboolean IsSameObject(JNIEnv *env, jobject ref1,
jobject ref2);
Тесты, обращаются ли две ссылки к тому же самому объекту Java.
Индексируйте 24 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
ref1
: объект Java.
ref2
: объект Java.
Возвраты JNI_TRUE
если ref1
и ref2
обратитесь к тому же самому объекту Java, или оба NULL
; иначе, возвраты JNI_FALSE
.
jfieldID GetFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
Возвращает полевой ID для экземпляра (нестатическое) поле class. Поле определяется его именем и подписью. Получить <тип> Поле и Набор <тип> семейства Field средства доступа функционируют полевые ID использования, чтобы получить объектные поля.
GetFieldID()
заставляет неинициализированный class быть инициализированным.
GetFieldID()
не может использоваться, чтобы получить поле длины массива. Использовать GetArrayLength()
вместо этого.
Индексируйте 94 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
name
: имя поля в 0 завершенном изменило строку UTF-8.
sig
: полевая подпись в 0 завершенном изменила строку UTF-8.
Возвращает полевой ID, или NULL
если работа перестала работать.
NoSuchFieldError
: если указанное поле не может быть найдено.
ExceptionInInitializerError
: если инициализатор class перестал работать из-за исключения.
OutOfMemoryError
: если система исчерпывает память.
NativeType Добираются <вводят> Поле(JNIEnv *env, jobject obj,
jfieldID fieldID);
Это семейство подпрограмм средства доступа возвращает значение экземпляра (нестатическое) поле объекта. Поле к доступу определяется полевым ID, полученным, вызывая GetFieldID()
.
Следующая таблица описывает Получать вводят Полевое имя подпрограммы и тип результата. Следует заменить, вводят, Добираются <вводят> Поле с типом Java поля, или используют одно из фактических стандартных имен от таблицы, и заменяют NativeType соответствующим собственным типом для той подпрограммы.
Доберитесь вводят Полевое Имя Подпрограммы
|
Индексировать
|
---|---|
GetObjectField() |
95 |
GetBooleanField() |
96 |
GetByteField() |
97 |
GetCharField() |
98 |
GetShortField() |
99 |
GetIntField() |
100 |
GetLongField() |
101 |
GetFloatField() |
102 |
GetDoubleField() |
103 |
env
: указатель на интерфейс JNI.
obj
: объект Java (не должен быть NULL
).
fieldID
: допустимый полевой ID.
Возвращает контент поля.
void
Набор <тип> Поле(JNIEnv *env, jobject obj, jfieldID fieldID,
NativeType value);
Это семейство подпрограмм средства доступа устанавливает значение экземпляра (нестатическое) поле объекта. Поле к доступу определяется полевым ID, полученным, вызывая GetFieldID()
.
Следующая таблица описывает Набор вводят Полевое имя подпрограммы и оценивают тип. Следует заменить, вводят Набор <тип> Поле с типом Java поля, или используют одно из фактических стандартных имен от таблицы, и заменяют NativeType соответствующим собственным типом для той подпрограммы.
Индексы в таблице функции интерфейса JNIEnv.
Набор <тип> Полевая Подпрограмма
|
Индексировать
|
---|---|
SetObjectField() |
104 |
S
etBooleanField() |
105 |
SetByteField() |
106 |
SetCharField() |
107 |
SetShortField() |
108 |
SetIntField() |
109 |
SetLongField() |
110 |
SetFloatField() |
111 |
SetDoubleField() |
112 |
env
: указатель на интерфейс JNI.
obj
: объект Java (не должен быть NULL
).
fieldID
: допустимый полевой ID.
value
: новое значение поля.
jmethodID GetMethodID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
Возвращает ID метода для экземпляра (нестатический) метод class или интерфейса. Метод может быть определен в одном из clazz
’s суперклассы и наследованный clazz
. Метод определяется его именем и подписью.
GetMethodID()
заставляет неинициализированный class быть инициализированным.
Получить ID метода конструктора, предоставления <init>
как имя метода и void
(V
) как тип возврата.
Индексируйте 33 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
name
: имя метода в 0 завершенном изменило строку UTF-8.
sig
: сигнатура метода в 0 завершенном изменила строку UTF-8.
Возвращает ID метода, или NULL
если указанный метод не может быть найден.
NoSuchMethodError
: если указанный метод не может быть найден.
ExceptionInInitializerError
: если инициализатор class перестал работать из-за исключения.
OutOfMemoryError
: если система исчерпывает память.
Вызов NativeType <тип> Метод(JNIEnv *env, jobject obj,
jmethodID methodID, ...);
Вызов NativeType <тип> MethodA(JNIEnv *env, jobject obj,
jmethodID methodID, const jvalue *args);
Вызов NativeType <тип> MethodV(JNIEnv *env, jobject obj,
jmethodID methodID, va_list args);
Методы от этих трех семейств операций используются, чтобы вызвать метод экземпляра Java от собственного метода. Они только отличаются по их механизму для того, чтобы передать параметры к методам, которые они вызывают.
Эти семейства операций вызывают экземпляр (нестатический) метод на объект Java согласно указанному ID метода. methodID
параметр должен быть получен, вызывая GetMethodID
()
.
Когда эти функции используются, чтобы вызвать закрытые методы и конструкторов, ID метода должен быть получен из реального class obj
, не от одного из его суперклассов.
Программисты помещают все параметры, которые нужно сразу передать к методу после methodID
параметр. Вызов <тип> подпрограмма Метода принимает эти параметры и передает их к методу Java, который программист хочет вызвать.
Программисты помещают все параметры методу в args
массив jvalues
это сразу следует methodID
параметр. Вызов <тип>, подпрограмма MethodA принимает параметры в этом массиве, и, поочередно, передает их к методу Java, что программист хочет вызвать.
Программисты помещают все параметры методу в args
параметр типа va_list
это сразу следует methodID
параметр. Вызов <тип>, подпрограмма MethodV принимает параметры, и, поочередно, передает их к методу Java, что программист хочет вызвать.
Следующая таблица описывает каждую из вызывающих подпрограмм метода согласно их типу результата. Следует заменить, вводят Вызов <тип> Метод с типом Java метода, который Вы вызываете (или используйте одно из фактических имен вызывающей подпрограммы метода от таблицы), и замените NativeType соответствующим собственным типом для той подпрограммы.
Индексы в таблице функции интерфейса JNIEnv:
Вызов вводит Имя Подпрограммы Метода
|
Индексировать
|
---|---|
CallVoidMethod() CallVoidMethodA() CallVoidMethodV() |
61 |
CallObjectMethod() CallObjectMethodA() CallObjectMethodV() |
34 |
CallBooleanMethod() CallBooleanMethodA() CallBooleanMethodV() |
37 |
CallByteMethod() CallByteMethodA() CallByteMethodV() |
40 |
CallCharMethod() CallCharMethodA() CallCharMethodV() |
43 |
CallShortMethod() CallShortMethodA() CallShortMethodV() |
46 |
CallIntMethod() CallIntMethodA() CallIntMethodV() |
49 |
CallLongMethod() CallLongMethodA() CallLongMethodV() |
52 |
CallFloatMethod() CallFloatMethodA() CallFloatMethodV() |
55 |
CallDoubleMethod() CallDoubleMethodA() CallDoubleMethodV() |
58 |
env
: указатель на интерфейс JNI.
obj
: объект Java.
methodID
: ID метода.
параметры методу Java.
args
: массив параметров.
args
: va_list параметров.
Возвращает результат вызова метода Java.
Exceptions raised during the execution of the Java method.
NativeType CallNonvirtual <тип> Метод(JNIEnv *env, jobject obj,
jclass clazz, jmethodID methodID, ...);
NativeType CallNonvirtual <тип> MethodA(JNIEnv *env, jobject obj,
jclass clazz, jmethodID methodID, const jvalue *args);
NativeType CallNonvirtual <тип> MethodV(JNIEnv *env, jobject obj,
jclass clazz, jmethodID methodID, va_list args);
Эти семейства операций вызывают экземпляр (нестатический) метод на объект Java согласно указанному class и ID метода. methodID
параметр должен быть получен, вызывая GetMethodID
()
на class clazz
.
CallNonvirtual <тип> семейства Method подпрограмм и Вызова <тип> семейства Method подпрограмм отличаются. Вызовите <вводят> подпрограммы Метода, вызывают метод, основанный на class объекта, в то время как CallNonvirtual <тип> подпрограммы Метода вызывают метод, основанный на class, определяемом clazz
параметр, из которого получается ID метода. ID метода должен быть получен из реального class объекта или от одного из его суперклассов.
Программисты помещают все параметры, которые нужно сразу передать к методу после methodID
параметр. CallNonvirtual <тип> подпрограмма Метода принимает эти параметры и передает их к методу Java, который программист хочет вызвать.
Программисты помещают все параметры методу в args
массив jvalues
это сразу следует methodID
параметр. CallNonvirtual <тип>, подпрограмма MethodA принимает параметры в этом массиве, и, поочередно, передает их к методу Java, что программист хочет вызвать.
Программисты помещают все параметры методу в args
параметр типа va_list
это сразу следует methodID
параметр. Подпрограмма CallNonvirtualMethodV принимает параметры, и, поочередно, передает их к методу Java, который программист хочет вызвать.
Следующая таблица описывает каждую из вызывающих подпрограмм метода согласно их типу результата. Следует заменить, вводят CallNonvirtual <тип> Метод с типом Java метода, или используют одно из фактических имен вызывающей подпрограммы метода от таблицы, и заменяют NativeType соответствующим собственным типом для той подпрограммы.
Индексы в таблице функции интерфейса JNIEnv.
CallNonvirtual вводят Имя Подпрограммы Метода
|
Индексировать
|
---|---|
CallNonvirtualVoidMethod() CallNonvirtualVoidMethodA() CallNonvirtualVoidMethodV() |
91 93 92 |
CallNonvirtualObjectMethod() CallNonvirtualObjectMethodA() CallNonvirtualObjectMethodV() |
64 66 65 |
CallNonvirtualBooleanMethod() CallNonvirtualBooleanMethodA() CallNonvirtualBooleanMethodV() |
67 69 68 |
CallNonvirtualByteMethod() CallNonvirtualByteMethodA() CallNonvirtualByteMethodV() |
70 72 71 |
CallNonvirtualCharMethod() CallNonvirtualCharMethodA() CallNonvirtualCharMethodV() |
73 75 74 |
CallNonvirtualShortMethod() CallNonvirtualShortMethodA() CallNonvirtualShortMethodV() |
76 78 77 |
CallNonvirtualIntMethod() CallNonvirtualIntMethodA() CallNonvirtualIntMethodV() |
79 81 80 |
CallNonvirtualLongMethod() CallNonvirtualLongMethodA() CallNonvirtualLongMethodV() |
82 84 83 |
CallNonvirtualFloatMethod() CallNonvirtualFloatMethodA() CallNonvirtualFloatMethodV() |
85 87 86 |
CallNonvirtualDoubleMethod() CallNonvirtualDoubleMethodA() CallNonvirtualDoubleMethodV() |
88 90 89 |
env
: указатель на интерфейс JNI.
clazz:
a
Java class.
obj
: объект Java.
methodID
: ID метода.
параметры методу Java.
args
: массив параметров.
args
: a va_list
из параметров.
Возвращает результат вызова метода Java.
Исключения повышаются во время выполнения метода Java.
jfieldID GetStaticFieldID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
Возвращает полевой ID для статического поля class. Поле определяется его именем и подписью. GetStatic <тип> Поле и SetStatic <тип> семейства Field средства доступа функционирует полевые ID использования, чтобы получить статические поля.
GetStaticFieldID()
заставляет неинициализированный class быть инициализированным.
Индексируйте 144 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
name
: статическое имя поля в 0 завершенном изменило строку UTF-8.
sig
: полевая подпись в 0 завершенном изменила строку UTF-8.
Возвращает полевой ID, или NULL
если указанное статическое поле не может быть найдено.
NoSuchFieldError
: если указанное статическое поле не может быть найдено.
ExceptionInInitializerError
: если инициализатор class перестал работать из-за исключения.
OutOfMemoryError
: если система исчерпывает память.
NativeType GetStatic <тип> Поле(JNIEnv *env, jclass clazz,
jfieldID fieldID);
Это семейство подпрограмм средства доступа возвращает значение статического поля объекта. Поле к доступу определяется полевым ID, который получается, вызывая GetStaticFieldID()
.
Следующая таблица описывает семейство, получают стандартные имена и типы результата. Следует заменить, вводят GetStatic <тип> Поле с типом Java поля, или одним из фактических статических полевых имен подпрограммы средства доступа от таблицы, и заменяют NativeType соответствующим собственным типом для той подпрограммы.
Индексы в таблице функции интерфейса JNIEnv.
GetStatic вводят Полевое Имя Подпрограммы
|
Индексировать
|
---|---|
GetStaticObjectField () |
145 |
GetStaticBooleanField () |
146 |
GetStaticByteField () |
147 |
GetStaticCharField () |
148 |
GetStaticShortField () |
149 |
GetStaticIntField () |
150 |
GetStaticLongField () |
151 |
GetStaticFloatField () |
152 |
GetStaticDoubleField () |
153 |
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
fieldID
: статический полевой ID.
Возвращает контент статического поля.
void
SetStatic <тип> Поле(JNIEnv *env, jclass clazz,
NativeType
jfieldID fieldID,value);
Это семейство подпрограмм средства доступа устанавливает значение статического поля объекта. Поле к доступу определяется полевым ID, который получается, вызывая GetStaticFieldID()
.
Следующая таблица описывает имя подпрограммы набора и типы значения. Следует заменить, вводят SetStatic <тип> Поле с типом Java поля, или одним из фактического набора статические полевые имена подпрограммы от таблицы, и заменяют NativeType соответствующим собственным типом для той подпрограммы.
Индексы в таблице функции интерфейса JNIEnv.
SetStatic вводят Полевое Имя Подпрограммы
|
Индексировать
|
---|---|
SetStaticObjectField () |
154 |
SetStaticBooleanField () |
155 |
SetStaticByteField () |
156 |
SetStaticCharField () |
157 |
SetStaticShortField () |
158 |
SetStaticIntField () |
159 |
SetStaticLongField () |
160 |
SetStaticFloatField () |
161 |
SetStaticDoubleField () |
162 |
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
fieldID
: статический полевой ID.
value
: новое значение поля.
jmethodID GetStaticMethodID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
Возвращает ID метода для статического метода class. Метод определяется его именем и подписью.
GetStaticMethodID()
заставляет неинициализированный class быть инициализированным.
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
name
: статическое имя метода в 0 завершенном изменило строку UTF-8.
sig
: сигнатура метода в 0 завершенном изменила строку UTF-8.
Возвращает ID метода, или NULL
если работа перестала работать.
NoSuchMethodError
: если указанный статический метод не может быть найден.
ExceptionInInitializerError
: если инициализатор class перестал работать из-за исключения.
OutOfMemoryError
: если система исчерпывает память.
NativeType CallStatic <тип> Метод(JNIEnv *env, jclass clazz,
jmethodID methodID, ...);
NativeType CallStatic <тип> MethodA(JNIEnv *env, jclass clazz,
jmethodID methodID, jvalue *args);
NativeType CallStatic <тип> MethodV(JNIEnv *env, jclass clazz,
jmethodID methodID, va_list args);
Это семейство операций вызывает статический метод на объект Java согласно указанному ID метода. methodID
параметр должен быть получен, вызывая GetStaticMethodID
()
.
ID метода должен быть получен из clazz
, не от одного из его суперклассов.
Программисты должны поместить все параметры, которые нужно сразу передать к методу после methodID
параметр. CallStatic <тип> подпрограмма Метода принимает эти параметры и передает их к методу Java, который программист хочет вызвать.
Программисты должны поместить все параметры методу в args
массив jvalues
это сразу следует methodID
параметр. Подпрограмма CallStaticMethodA принимает параметры в этом массиве, и, поочередно, передает их к методу Java, который программист хочет вызвать.
Программисты должны поместить все параметры методу в args
параметр типа va_list
это сразу следует methodID
параметр. Подпрограмма CallStaticMethodV принимает параметры, и, поочередно, передает их к методу Java, который программист хочет вызвать.
Следующая таблица описывает каждую из вызывающих подпрограмм метода согласно их типам результата. Следует заменить, вводят CallStatic <тип> Метод с типом Java метода, или одним из фактических имен вызывающей подпрограммы метода от таблицы, и заменяют NativeType соответствующим собственным типом для той подпрограммы.
Индексы в таблице функции интерфейса JNIEnv.
CallStatic вводят Имя Подпрограммы Метода
|
Индексировать
|
---|---|
CallStaticVoidMethod () CallStaticVoidMethodA () CallStaticVoidMethod V() |
141 143 142 |
CallStaticObjectMethod () CallStaticObjectMethod A() CallStaticObjectMethod V() |
114 116 115 |
CallStaticBooleanMethod () CallStaticBooleanMethod A() CallStaticBooleanMethod V() |
117 119 118 |
CallStaticByteMethod () CallStaticByteMethod A() CallStaticByteMethod V() |
120 122 121 |
CallStaticCharMethod () CallStaticCharMethod A() CallStaticCharMethod V() |
123 125 124 |
CallStaticShortMethod () CallStaticShortMethod A() CallStaticShortMethod V() |
126 128 127 |
CallStaticIntMethod () CallStaticIntMethod A() CallStaticIntMethod V() |
129 131 130 |
CallStaticLongMethod () CallStaticLongMethod A() CallStaticLongMethod V() |
132 134 133 |
CallStaticFloatMethod () CallStaticFloatMethod A() CallStaticFloatMethod V() |
135 137 136 |
CallStaticDoubleMethod () CallStaticDoubleMethod A() CallStaticDoubleMethod V() |
138 140 139 |
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
methodID
: статический ID метода.
параметры статическому методу.
args
: массив параметров.
args
: a va_list
из параметров.
Возвращает результат вызова статического метода Java.
Exceptions raised during the execution of the Java method.
jstring NewString(JNIEnv *env, const jchar *unicodeChars,
jsize len);
Создает новое java.lang.String
объект от массива символов Unicode.
env
: указатель на интерфейс JNI.
unicodeChars
: указатель на строку Unicode.
len
: длина строки Unicode.
Возвращает строковый объект Java, или NULL
если строка не может быть создана.
OutOfMemoryError
: если система исчерпывает память.
jsize GetStringLength(JNIEnv *env, jstring string);
Возвращает длину (количество символов Unicode) строки Java.
env
: указатель на интерфейс JNI.
string
: строковый объект Java.
Возвращает длину строки Java.
const jchar * GetStringChars(JNIEnv *env, jstring string,
jboolean *isCopy);
Возвращает указатель на массив символов Unicode строки. Этот указатель не допустим до ReleaseStringchars()
вызывается.
Если isCopy
не NULL
, тогда *isCopy
устанавливается в JNI_TRUE
если копия делается; или это устанавливается в JNI_FALSE
если никакая копия не делается.
env
: указатель на интерфейс JNI.
string
: строковый объект Java.
isCopy
: указатель на булево.
Возвращает указатель на строку Unicode, или NULL
если работа перестала работать.
void ReleaseStringChars(JNIEnv *env, jstring string,
const jchar *chars);
Сообщает VM, что собственный код больше не нуждается в доступе к chars
. chars
параметром является указатель, полученный из string
использование GetStringChars()
.
env
: указатель на интерфейс JNI.
string
: строковый объект Java.
chars
: указатель на строку Unicode.
jstring NewStringUTF(JNIEnv *env, const char *bytes);
Создает новое java.lang.String
объект от массива символов в измененном кодировании UTF-8.
env
: указатель на интерфейс JNI.
bytes
: указатель на измененную строку UTF-8.
Возвращает строковый объект Java, или NULL
если строка не может быть создана.
OutOfMemoryError
: если система исчерпывает память.
jsize GetStringUTFLength(JNIEnv *env, jstring string);
Возвращает длину в байтах измененного представления UTF-8 строки.
env
: указатель на интерфейс JNI.
string
: строковый объект Java.
Возвращает длину UTF-8 строки.
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
если работа перестала работать.
void ReleaseStringUTFChars(JNIEnv *env, jstring string,
const char *utf);
Сообщает VM, что собственный код больше не нуждается в доступе к utf
. utf
параметром является указатель, полученный из string
использование GetStringUTFChars()
.
env
: указатель на интерфейс JNI.
string
: строковый объект Java.
utf
: указатель на измененную строку UTF-8.
В JDK/JRE 1.1, программисты могут получить примитивные элементы массива в предоставленном пользователем буфере. С JDK/JRE 1.2 дополнительных набора функций обеспечиваются, позволяя собственный код получить символы в Unicode (UTF-16) или изменяются UTF-8, кодирующий в предоставленном пользователем буфере. См. функции ниже.
void GetStringRegion(JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);
Копии len
число символов Unicode, начинающихся при смещении start
к данному буферу buf
.
Броски StringIndexOutOfBoundsException
на индексируют переполнение.
JDK/JRE 1.2
< void GetStringUTFRegion(JNIEnv *env, jstring str, jsize start, jsize len, char *buf);
Преобразовывает len
число символов Unicode, начинающихся при смещении start
в измененное кодирование UTF-8 и место результат в данном буфере buf
.
Броски StringIndexOutOfBoundsException
на индексируют переполнение.
JDK/JRE 1.2
ReleaseStringCriticalconst jchar * GetStringCritical(JNIEnv *env, jstring string, jboolean *isCopy);
void ReleaseStringCritical(JNIEnv *env, jstring string, const jchar *carray);
Семантика этих двух функций подобна существующему Get/ReleaseStringChars
функции. Если возможный, VM возвращает указатель, чтобы представить элементы в виде строки; иначе, копия делается. Однако, есть существенные ограничения на то, как эти функции могут использоваться. В сегменте кода, включенном Get/ReleaseStringCritical
вызовы, собственный код не должен издать произвольные приказы JNI, или заставить текущий поток блокировать.
Ограничения на Get/ReleaseStringCritical
подобны тем на Get/ReleasePrimitiveArrayCritical
.
JDK/JRE 1.2
jsize GetArrayLength(JNIEnv *env, jarray array);
Возвращает число элементов в массиве.
env
: указатель на интерфейс JNI.
array
: объект массива Java.
Возвращает длину массива.
jobjectArray NewObjectArray(JNIEnv *env, jsize length,
jclass elementClass, jobject initialElement);
Создает новый массив, содержащий объекты в class elementClass
. Все элементы первоначально устанавливаются в initialElement
.
env
: указатель на интерфейс JNI.
length
: размер массива.
elementClass
: элемент массива class.
initialElement
: значение инициализации.
Возвращает объект массива Java, или NULL
если массив не может быть создан.
OutOfMemoryError
: если система исчерпывает память.
jobject GetObjectArrayElement(JNIEnv *env,
jobjectArray array, jsize index);
Возвращает элемент Object
массив.
env
: указатель на интерфейс JNI.
array
: массив Java.
index
: массив индексирует.
Возвращает объект Java.
ArrayIndexOutOfBoundsException
: если index
не определяет, что допустимое индексирует в массиве.
void SetObjectArrayElement(JNIEnv *env, jobjectArray array,
jsize index, jobject value);
Устанавливает элемент Object
массив.
env
: указатель на интерфейс JNI.
array
: массив Java.
index
: массив индексирует.
value
: новое значение.
ArrayIndexOutOfBoundsException
: если index
не определяет, что допустимое индексирует в массиве.
ArrayStoreException
: если class value
не подкласс элемента class массива.
ArrayType, Новый <PrimitiveType> Массив(JNIEnv *env, jsize length);
Семейство операций, используемых, чтобы создать новый примитивный объект массива. Таблица 4-8 описывает определенных примитивных конструкторов массива. Следует заменить Новый <PrimitiveType> Массив с одним из фактических примитивных имен подпрограммы конструктора массива от следующей таблицы, и заменить ArrayType соответствующим типом массива для той подпрограммы.
Индексы в таблице функции интерфейса JNIEnv.
Новый <PrimitiveType> Подпрограммы Массива
|
Индексировать
|
---|---|
NewBooleanArray() |
175
|
NewByteArray() |
176
|
NewCharArray() |
177
|
NewShortArray() |
178
|
NewIntArray() |
179
|
NewLongArray() |
180
|
NewFloatArray() |
181
|
NewDoubleArray() |
182
|
env
: указатель на интерфейс JNI.
length
: длина массива.
Возвращает массив Java, или NULL
если массив не может быть создан.
NativeType *
Получите ArrayElements <PrimitiveType>(JNIEnv *env,
ArrayType
array, jboolean *isCopy);
Семейство функций, которое возвращает тело примитивного массива. Результат допустим до соответствующего Выпуска<
PrimitiveType>
ArrayElements () функция вызывают. Так как возвращенный массив может быть копией массива Java, изменения, произведенные в возвращенном массиве, будут не обязательно отражены в оригинале array
до Release<PrimitiveType>ArrayElements()
вызывается.
Если isCopy
не NULL
, тогда *isCopy
устанавливается в JNI_TRUE
если копия делается; или это устанавливается в JNI_FALSE
если никакая копия не делается.
Следующая таблица описывает определенные примитивные средства доступа элемента массива. Следует сделать следующие замены:
Независимо от того, как булевы массивы представляются в Java VM, GetBooleanArrayElements()
всегда возвращает указатель на jbooleans
, с каждым байтом, обозначающим элемент (распакованное представление). Все массивы других типов, как гарантируют, будут непрерывны в памяти.
Индексы в таблице функции интерфейса JNIEnv.
Получите Подпрограммы ArrayElements <PrimitiveType>
|
Индексировать
|
---|---|
GetBooleanArrayElements() |
183
|
GetByteArrayElements() |
184
|
GetCharArrayElements() |
185
|
GetShortArrayElements() |
186
|
GetIntArrayElements() |
187
|
GetLongArrayElements() |
188
|
GetFloatArrayElements() |
189
|
GetDoubleArrayElements() |
190
|
env
: указатель на интерфейс JNI.
array
: строковый объект Java.
isCopy
: указатель на булево.
Возвращает указатель на элементы массива, или NULL
если работа перестала работать.
void
Выпуск <PrimitiveType> ArrayElements(JNIEnv *env,
ArrayType
array,
NativeType
*elems, jint mode);
Семейство функций, которое сообщает VM, что собственный код больше не нуждается в доступе к elems
. elems
параметром является указатель, полученный из array
использование соответствия Добирается<
PrimitiveType>
ArrayElements () функция. В случае необходимости эта функция копирует назад все изменения, произведенные в elems
исходному массиву.
mode
параметр предоставляет информацию о том, как буфер массива должен быть выпущен. mode
не имеет никакого эффекта если elems
не копия элементов в array
. Иначе, mode
оказывает следующее влияние, как показано в следующей таблице:
В большинстве случаев программисты передают “0” к mode
параметр, чтобы гарантировать непротиворечивое поведение и для прикрепленных и для скопированных массивов. Другие опции дают программисту больше контроля управлением памятью и должны использоваться с большой осторожностью.
Следующая таблица описывает определенные подпрограммы, которые включают семейство примитивных устройств обработки отходов массива. Следует сделать следующие замены:
Индексы в таблице функции интерфейса JNIEnv.
Выпуск <PrimitiveType> Подпрограммы ArrayElements
|
Индексировать
|
---|---|
ReleaseBooleanArrayElements() |
191
|
ReleaseByteArrayElements() |
192
|
ReleaseCharArrayElements() |
193
|
ReleaseShortArrayElements() |
194
|
ReleaseIntArrayElements() |
195
|
ReleaseLongArrayElements() |
196
|
ReleaseFloatArrayElements() |
197
|
ReleaseDoubleArrayElements() |
198
|
env
: указатель на интерфейс JNI.
array
: объект массива Java.
elems
: указатель, чтобы выстроить элементы.
mode
: режим выпуска.
пусто Получите ArrayRegion <PrimitiveType>(JNIEnv *env,
ArrayType
array,
NativeType
jsize start, jsize len,*buf);
Семейство функций, которое копирует область примитивного массива в буфер.
Следующая таблица описывает определенные примитивные средства доступа элемента массива. Следует сделать следующие замены:
Индексы в таблице функции интерфейса JNIEnv.
Получите Подпрограмму ArrayRegion <PrimitiveType>
|
Индексировать
|
---|---|
GetBooleanArrayRegion() |
199
|
GetByteArrayRegion() |
200
|
GetCharArrayRegion() |
201
|
GetShortArrayRegion() |
202
|
GetIntArrayRegion() |
203
|
GetLongArrayRegion() |
204
|
GetFloatArrayRegion() |
205
|
GetDoubleArrayRegion() |
206
|
env
: указатель на интерфейс JNI.
array
: массив Java.
start
: начальное значение индекса.
len
: число элементов, которое будет скопировано.
buf
: целевой буфер.
ArrayIndexOutOfBoundsException
: если одно из индексирования в области не допустимо.
void
Набор <PrimitiveType> ArrayRegion(JNIEnv *env,
ArrayType
array,
константа NativeType
jsize start, jsize len,*buf);
Семейство функций, которое копирует назад область примитивного массива от буфера.
Следующая таблица описывает определенные примитивные средства доступа элемента массива. Следует сделать следующие замены:
Индексы в таблице функции интерфейса JNIEnv.
Набор <PrimitiveType> Подпрограмма ArrayRegion
|
Индексировать
|
---|---|
SetBooleanArrayRegion() |
207
|
SetByteArrayRegion() |
208
|
SetCharArrayRegion() |
209
|
SetShortArrayRegion() |
210
|
SetIntArrayRegion() |
211
|
SetLongArrayRegion() |
212
|
SetFloatArrayRegion() |
213
|
SetDoubleArrayRegion() |
214
|
ПАРАМЕТРЫ:
env
: указатель на интерфейс JNI.
array
: массив Java.
start
: начальное значение индекса.
len
: число элементов, которое будет скопировано.
buf
: исходный буфер.
ArrayIndexOutOfBoundsException
: если одно из индексирования в области не допустимо.
ОтметитьС JDK/JRE 1.1, программисты могут использовать Новые функции, представленные с JDK/JRE 1.3, позволяют собственному коду получать прямой указатель, чтобы выстроить элементы, даже если VM не поддерживает прикрепление. |
void * GetPrimitiveArrayCritical(JNIEnv *env, jarray array, jboolean *isCopy);
void ReleasePrimitiveArrayCritical(JNIEnv *env, jarray array, void *carray, jint mode);
Семантика этих двух функций очень подобна существующему Get/Release<primitivetype>ArrayElements functions. If possible, the VM returns a pointer to the primitive array; otherwise, a copy is made. However, there are significant restrictions on how these functions can be used.
После вызова GetPrimitiveArrayCritical
, собственный код не должен работать за длительным периодом времени прежде, чем это вызовет ReleasePrimitiveArrayCritical
. Мы должны обработать код в этой паре функций как работающий в "критической области." В критической области собственный код не должен вызвать другие функции JNI, или любой системный вызов, который может заставить текущий поток блокировать и ожидать другого потока Java. (Например, текущий поток не должен вызвать read
на потоке, записанном другим потоком Java.)
Эти ограничения делают это более вероятно, что собственный код получит нескопированную версию массива, даже если VM не будет поддерживать прикрепление. Например, VM может временно отключить сборку "мусора", когда собственный код содержит указатель на массив, полученный через GetPrimitiveArrayCritical
.
Многократные пары GetPrimtiveArrayCritical
и ReleasePrimitiveArrayCritical
может быть вложен. Например:
jint len = (*env)->GetArrayLength(env, arr1); jbyte *a1 = (*env)->GetPrimitiveArrayCritical(env, arr1, 0); jbyte *a2 = (*env)->GetPrimitiveArrayCritical(env, arr2, 0); /* We need to check in case the VM tried to make a copy. */ if (a1 == NULL || a2 == NULL) { ... /* out of memory exception thrown */ } memcpy(a1, a2, len); (*env)->ReleasePrimitiveArrayCritical(env, arr2, a2, 0); (*env)->ReleasePrimitiveArrayCritical(env, arr1, a1, 0);
Отметьте это GetPrimitiveArrayCritical
мог бы все еще сделать копию массива, если VM внутренне представляет массивы в различном формате. Поэтому мы должны проверить его возвращаемое значение по NULL
для возможного из ситуаций с памятью.
Редактирование Индексирует 222 в таблице функции интерфейса JNIEnv.
Редактирование Индексирует 223 в таблице функции интерфейса JNIEnv.
JDK/JRE 1.2
jint RegisterNatives(JNIEnv *env, jclass clazz,
const JNINativeMethod *methods, jint nMethods);
Регистрирует собственные методы в class, определенном clazz
параметр. methods
параметр определяет массив JNINativeMethod
структуры, которые содержат имена, подписи, и указатели функции собственных методов. name
и signature
поля структуры JNINativeMethod являются указателями на измененные строки UTF-8. nMethods
параметр определяет число собственных методов в массиве. JNINativeMethod
структура определяется следующим образом:
У указателей функции номинально должна быть следующая подпись:
Индексируйте 215 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
methods
: собственные методы в class.
nMethods
: число собственных методов в class.
Возвраты “0” на успехе; возвращает отрицательную величину при отказе.
NoSuchMethodError
: если указанный метод не может быть найден или если метод не является собственным.
jint UnregisterNatives(JNIEnv *env, jclass clazz);
Нерегистрирует собственные методы class. class возвращается к состоянию прежде, чем это было соединено или зарегистрировано в его собственных функциях метода.
Эта функция не должна использоваться в нормальном собственном коде. Вместо этого это обеспечивает специальные программы способ перезагрузить и повторно соединить собственные библиотеки.
env
: указатель на интерфейс JNI.
clazz
: Java объект class.
Возвраты “0” на успехе; возвращает отрицательную величину при отказе.
jint MonitorEnter(JNIEnv *env, jobject obj);
Вводит монитор, связанный с базовым объектом Java, упомянутым obj
.
obj
ссылка не должна быть NULL
. Каждому объекту Java связали монитор с этим. Если текущему потоку уже принадлежит монитор, связанный с obj
, это постепенно увеличивает счетчик в мониторе, указывающем на число раз, этот поток ввел монитор. Если монитор, связанный с obj
не принадлежит никакому потоку, текущий поток становится владельцем монитора, устанавливая количество записи этого монитора к 1. Если другому потоку уже принадлежит монитор, связанный с obj
, текущий поток ожидает, пока монитор не выпускается, затем попробовал еще раз получать владение.
Монитор вошел через a MonitorEnter
Из вызова функции JNI нельзя выйти, используя monitorexit
Инструкция виртуальной машины Java или синхронизируемый возврат метода. A MonitorEnter
Вызов функции JNI и a monitorenter
Инструкция виртуальной машины Java может мчаться, чтобы ввести монитор, связанный с тем же самым объектом.
Избегать мертвых блокировок, монитор, вводимый через a MonitorEnter
Из вызова функции JNI нужно выйти, используя MonitorExit
Вызов JNI, если DetachCurrentThread
вызов используется, чтобы неявно выпустить мониторы JNI.
env
: указатель на интерфейс JNI.
obj
: нормальный объект Java или объект class.
Возвраты “0” на успехе; возвращает отрицательную величину при отказе.
jint MonitorExit(JNIEnv *env, jobject obj);
Текущий поток должен быть владельцем монитора, связанного с базовым объектом Java, упомянутым obj
. Поток постепенно уменьшает счетчик, указывающий на число раз, это ввело этот монитор. Если значение счетчика становится нулем, текущий поток выпускает монитор.
Собственный код не должен использовать MonitorExit
выходить из монитора, вводимого через синхронизируемый метод или a monitorenter
Инструкция виртуальной машины Java.
env
: указатель на интерфейс JNI.
obj
: нормальный объект Java или объект class.
Возвраты “0” на успехе; возвращает отрицательную величину при отказе.
IllegalMonitorStateException
: если текущему потоку не принадлежит монитор.
NIO-связанные точки входа позволяют собственный код доступу java.nio
прямые буферы. Содержание прямого буфера может, потенциально, находиться в собственной памяти за пределами собранной "мусор" "кучи" дежурного блюда. Для получения информации о прямых буферах, пожалуйста, см. Новые API ввода-вывода и спецификацию java.nio.ByteBuffer class.
Каждая реализация виртуальной машины Java должна поддерживать эти функции, но не каждая реализация обязан поддерживать доступ JNI к прямым буферам. Если JVM не поддерживает такой доступ тогда, NewDirectByteBuffer и функции GetDirectBufferAddress должны всегда возвращать NULL, и функция GetDirectBufferCapacity должна всегда возвращать -1. Если JVM действительно поддерживает такой доступ тогда, эти три функции должны быть реализованы, чтобы возвратить соответствующие значения.
jobject NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity);
Выделяет и возвращает прямой java.nio.ByteBuffer, обращающийся к блоку памяти, запускающейся в адресе памяти address и расширяющей байты capacity.
Собственный код, который вызывает эту функцию и возвращает получающийся буферный байтом объект коду на уровне Java, должен гарантировать, что буфер обращается к допустимой области памяти, которая доступна для того, чтобы читать и, если приспособлено, пишущий. Попытка получить доступ к недопустимой ячейке памяти от кода Java будет или возвращать произвольное значение, не иметь никакого видимого эффекта, или заставлять неуказанное исключение быть брошенным.
Индексируйте 229 в таблице функции интерфейса JNIEnv.
env: указатель на интерфейс JNIEnv
address: начальный адрес области памяти (не должен быть NULL),
capacity: размер в байтах области памяти (должно быть положительным),
Возвращает локальную ссылку на недавно инстанцированный объект java.nio.ByteBuffer. NULL возвратов, если исключение происходит, или если доступ JNI к прямым буферам не поддерживается этой виртуальной машиной.
OutOfMemoryError: если выделение ByteBuffer возражает сбоям
JDK/JRE 1.4
void* GetDirectBufferAddress(JNIEnv* env, jobject buf);
На выборки и возвраты начальный адрес области памяти ссылается данный прямой java.nio.Buffer.
Эта функция позволяет собственному коду получать доступ к той же самой области памяти, которая доступна для кода Java через буферный объект.
Индексируйте 230 в таблице функции интерфейса JNIEnv.
env: указатель на интерфейс JNIEnv
buf: прямой объект java.nio.Buffer (не должен быть NULL),
Возвращает начальный адрес области памяти, на которую ссылается буфер. NULL возвратов, если область памяти неопределена, если данным объектом не является прямой java.nio.Buffer, или если доступ JNI к прямым буферам не поддерживается этой виртуальной машиной.
JDK/JRE 1.4
jlong GetDirectBufferCapacity(JNIEnv* env, jobject buf);
На выборки и возвраты емкость области памяти ссылается данный прямой java.nio.Buffer. Емкость является числом элементов, которое содержит область памяти.
Индексируйте 231 в таблице функции интерфейса JNIEnv.
env: указатель на интерфейс JNIEnv
buf: прямой объект java.nio.Buffer (не должен быть NULL),
Возвращает емкость области памяти, связанной с буфером. -1 возвратов, если данным объектом не является прямой java.nio.Buffer, если объект является невыровненным буфером представления и архитектурой процессора, не поддерживает невыровненный доступ, или если доступ JNI к прямым буферам не поддерживается этой виртуальной машиной.
JDK/JRE 1.4
Программисты могут использовать JNI, чтобы вызвать методы Java или поля Java доступа, если они знают имя и тип методов или полей. API Reflection Ядра Java позволяет программистам анализировать классы Java во времени выполнения. JNI обеспечивает ряд функций преобразования между полем и ID метода, привыкшими в JNI к полю и объектам метода, используемым в API Reflection Ядра Java.
jmethodID FromReflectedMethod(JNIEnv *env, jobject method);
Преобразовывает a java.lang.reflect.Method
или java.lang.reflect.Constructor
возразите против ID метода.
Индексируйте 7 в таблице функции интерфейса JNIEnv.
JDK/JRE 1.2
jfieldID FromReflectedField(JNIEnv *env, jobject field);
Преобразовывает a java.lang.reflect.Field
к полевому ID.
JDK/JRE 1.2
jobject ToReflectedMethod(JNIEnv *env, jclass cls,
jmethodID methodID, jboolean isStatic);
Преобразовывает ID метода, полученный из cls
к a java.lang.reflect.Method
или java.lang.reflect.Constructor
объект. isStatic
должен быть установлен в JNI_TRUE
если ID метода обращается к статическому полю, и JNI_FALSE
иначе.
Броски OutOfMemoryError
и возвраты 0, если сбои.
Индексируйте 9 в таблице функции интерфейса JNIEnv.
JDK/JRE 1.2
jobject ToReflectedField(JNIEnv *env, jclass cls,
jfieldID fieldID, jboolean isStatic);
Преобразовывает полевой ID, полученный из cls
к a java.lang.reflect.Field
объект. isStatic
должен быть установлен в JNI_TRUE
если fieldID
обращается к статическому полю, и JNI_FALSE
иначе.
Броски OutOfMemoryError
и возвраты 0, если сбои.
Индексируйте 12 в таблице функции интерфейса JNIEnv.
JDK/JRE 1.2
jint GetJavaVM(JNIEnv *env, JavaVM **vm);
Возвращает Java интерфейс VM (используемый в API Вызова) связанный с текущим потоком. Результат помещается в расположение, на которое указывает второй параметр, vm
.
Индексируйте 219 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
vm
: указатель туда, где результат должен быть помещен.
Возвраты “0” на успехе; возвращает отрицательную величину при отказе.
Содержание | Предыдущий | Следующий |