Spec-Zone .ru
спецификации, руководства, описания, API
|
Содержание | Предыдущий | Следующий |
Эта глава служит ссылочным разделом для функций JNI. Это обеспечивает полный список всех функций JNI. Это также представляет точное расположение таблицы функции JNI.
Отметьте использование термина "должный", чтобы описать ограничения на программистов JNI. Например, когда Вы видите, что определенная функция JNI должна получить НЕНУЛЕВОЙ объект, это - Ваша обязанность гарантировать, что НУЛЬ не передают к той функции JNI. В результате реализация JNI не должна выполнить регистрации Нулевого указателя той функции JNI.
Часть этой главы адаптируется из документации Netscape JRI.
Ссылочные материальные группы функционируют своим использованием. Ссылочный раздел организуется следующими функциональными областями:
Каждая функция доступна при фиксированном смещении через параметр JNIEnv. Тип JNIEnv является указателем на структуру, хранящую все указатели функции JNI. Это определяется следующим образом:
VM инициализирует функциональную таблицу, как показано Примером кода 4-1. Отметьте, что первые три записи резервируются для будущей совместимости с COM. Кроме того, мы резервируем много дополнительные NULL
записи около начала функциональной таблицы, так, чтобы, например, будущая связанная с классом работа 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);
Загружает класс из буфера необработанных данных класса. На буфер, содержащий необработанные данные класса, не ссылается VM после возвратов вызова DefineClass, и это может быть отброшено при желании.
Индекс 5 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
name
: имя класса или интерфейса, который будет определен. Строка кодируется в измененном UTF-8.
loader
: загрузчик класса, присвоенный определенному классу.
buf
: буфер, содержащий .class
данные файла.
bufLen
: буферная длина.
Возвращает объект класса Java или NULL
если ошибка происходит.
ClassFormatError
: если данные класса не определяют допустимый класс.
ClassCircularityError
: если бы класс или интерфейс были бы своим собственным суперклассом или суперинтерфейсом.
OutOfMemoryError
: если система исчерпывает память.
SecurityException
: если вызывающая сторона пытается определить класс в дереве пакета "java".
jclass FindClass(JNIEnv *env, const char *name);
В выпуске 1.1 JDK эта функция загружает локально определенный класс. Это ищет каталоги и файлы zip, определенные CLASSPATH
переменная окружения для класса с указанным именем.
Начиная с Java 2 выпуска 1.2 SDK модель обеспечения безопасности Java позволяет несистемным классам загружать и вызывать собственные методы. FindClass
определяет местоположение загрузчика класса, связанного с текущим собственным методом; то есть, загрузчик класса класса, который объявил собственный метод. Если собственный метод будет принадлежать системному классу, то никакой загрузчик класса не будет включен. Иначе, надлежащий загрузчик класса будет вызван, чтобы загрузить и соединить именованный класс.
Начиная с Java 2 выпуска 1.2 SDK, когда FindClass
вызывается через Интерфейс Вызова, нет никакого текущего собственного метода или его связанного загрузчика класса. В этом случае, результат ClassLoader.getSystemClassLoader
используется. Это - загрузчик класса, который виртуальная машина создает для приложений, и в состоянии определить местоположение классов, перечисленных в java.class.path
свойство.
name
параметром является полностью определенное имя класса или подпись типа массива. Например, полностью определенное имя класса для java.lang.String
класс:
"java/lang/String"
Подпись типа массива класса массива java.lang.Object[]
:
"[Ljava/lang/Object;"
Индекс 6 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
name
: полностью определенное имя класса (то есть, имя пакета, разграниченное“/
”, сопровождаемый именем класса). Если имя начинается“[
“(символ подписи массива), это возвращает класс массива. Строка кодируется в измененном UTF-8.
Возвращает объект класса из полностью определенного имени, или NULL
если класс не может быть найден.
ClassFormatError
: если данные класса не определяют допустимый класс.
ClassCircularityError
: если бы класс или интерфейс были бы своим собственным суперклассом или суперинтерфейсом.
NoClassDefFoundError
: если никакое определение для требуемого класса или интерфейса не может быть найдено.
OutOfMemoryError
: если система исчерпывает память.
jclass GetSuperclass(JNIEnv *env, jclass clazz);
Если clazz
представляет любой класс кроме класса Object
, тогда эта функция возвращает объект, который представляет суперкласс класса, определенного clazz
.
Если clazz
определяет класс Object
, или clazz
представляет интерфейс, эта функция возвраты NULL
.
Индекс 10 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: объект класса Java.
Возвращает суперкласс класса, представленного clazz
, или NULL
.
jboolean IsAssignableFrom(JNIEnv *env, jclass clazz1,
jclass clazz2);
Определяет ли объект clazz1
может быть безопасно брошен к clazz2
.
Индекс 11 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz1
: параметр первого класса.
clazz2
: второй параметр класса.
Возвраты 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);
Создает объект исключения из указанного класса с сообщением, определенным 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.
Чтобы преодолеть это свойственное ограничение, рекомендуется, чтобы стандартная (сильная) локальная или глобальная ссылка на тот же самый объект была получена, используя функции JNI NewLocalRef
или NewGlobalRef
, и что эта сильная ссылка использоваться, чтобы получить доступ к намеченному объекту. Эти функции возвратятся NULL
если объект был освобожден, и иначе возвратит сильную ссылку (который будет препятствовать объекту быть освобожденным). Новая ссылка должна быть явно удалена, когда немедленный доступ к объекту больше не требуется, позволяя объект быть освобожденным.
Слабая глобальная ссылка более слаба чем другие типы слабых ссылок (объекты 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 параметр не должен обратиться к классу массива.
Индекс 27 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: объект класса Java.
Возвращает объект Java, или NULL
если объект не может быть создан.
InstantiationException
: если класс является интерфейсом или абстрактным классом.
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
параметр не должен обратиться к классу массива.
Программисты помещают все параметры, которые нужно сразу передать конструктору после methodID
параметр. NewObject()
принимает эти параметры и передает их к методу Java, который программист хочет вызвать.
Индекс 28 в таблице функции интерфейса JNIEnv.
Программисты помещают все параметры, которые нужно передать конструктору в args
массив jvalues
это сразу следует methodID
параметр. NewObjectA()
принимает параметры в этом массиве, и, поочередно, передает их к методу Java, который программист хочет вызвать.
Индекс 30 в таблице функции интерфейса JNIEnv.
Программисты помещают все параметры, которые нужно передать конструктору в args
параметр типа va_list
это сразу следует methodID
параметр. NewObjectV()
принимает эти параметры, и, поочередно, передает их к методу Java, который программист хочет вызвать.
Индекс 29 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: объект класса Java.
methodID
: ID метода конструктора.
параметры конструктору.
args
: массив параметров конструктору.
args
: va_list параметров конструктору.
Возвращает объект Java, или NULL
если объект не может быть создан.
InstantiationException
: если класс является интерфейсом или абстрактным классом.
OutOfMemoryError
: если система исчерпывает память.
Любые исключения, выданные конструктором.
jclass GetObjectClass(JNIEnv *env, jobject obj);
Возвращает класс объекта.
Индекс 31 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
obj
: объект Java (не должен быть NULL
).
Возвращает объект класса Java.
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);
Тесты, является ли объект экземпляром класса.
Индекс 32 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
obj
: объект Java.
clazz
: объект класса Java.
Возвраты JNI_TRUE
если obj
может быть брошен к clazz
; иначе, возвраты JNI_FALSE
. A NULL
объект может быть брошен к любому классу.
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 для экземпляра (нестатическое) поле класса. Поле определяется его именем и подписью. Получить <тип> Поле и Набор <тип> семейства Field средства доступа функционируют полевые ID использования, чтобы получить объектные поля.
GetFieldID()
заставляет неинициализированный класс быть инициализированным.
GetFieldID()
не может использоваться, чтобы получить поле длины массива. Использовать GetArrayLength()
вместо этого.
Индекс 94 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: объект класса Java.
name
: имя поля в 0 завершенном изменило строку UTF-8.
sig
: полевая подпись в 0 завершенном изменила строку UTF-8.
Возвращает полевой ID, или NULL
если работа перестала работать.
NoSuchFieldError
: если указанное поле не может быть найдено.
ExceptionInInitializerError
: если инициализатор класса перестал работать из-за исключения.
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 метода для экземпляра (нестатический) метод класса или интерфейса. Метод может быть определен в одном из clazz
’s суперклассы и наследованный clazz
. Метод определяется его именем и подписью.
GetMethodID()
заставляет неинициализированный класс быть инициализированным.
Получить ID метода конструктора, предоставления <init>
как имя метода и void
(V
) как тип возврата.
Индекс 33 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: объект класса Java.
name
: имя метода в 0 завершенном изменило строку UTF-8.
sig
: сигнатура метода в 0 завершенном изменила строку UTF-8.
Возвращает ID метода, или NULL
если указанный метод не может быть найден.
NoSuchMethodError
: если указанный метод не может быть найден.
ExceptionInInitializerError
: если инициализатор класса перестал работать из-за исключения.
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 метода должен быть получен из реального класса 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 согласно указанному классу и ID метода. methodID
параметр должен быть получен, вызывая GetMethodID
()
на классе clazz
.
CallNonvirtual <тип> семейства Method подпрограмм и Вызова <тип> семейства Method подпрограмм отличаются. Вызовите <вводят> подпрограммы Метода, вызывают метод, основанный на классе объекта, в то время как CallNonvirtual <тип> подпрограммы Метода вызывают метод, основанный на классе, определяемом clazz
параметр, из которого получается ID метода. ID метода должен быть получен из реального класса объекта или от одного из его суперклассов.
Программисты помещают все параметры, которые нужно сразу передать к методу после 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.
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 для статического поля класса. Поле определяется его именем и подписью. GetStatic <тип> Поле и SetStatic <тип> семейства Field средства доступа функционирует полевые ID использования, чтобы получить статические поля.
GetStaticFieldID()
заставляет неинициализированный класс быть инициализированным.
Индекс 144 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: объект класса Java.
name
: статическое имя поля в 0 завершенном изменило строку UTF-8.
sig
: полевая подпись в 0 завершенном изменила строку UTF-8.
Возвращает полевой ID, или NULL
если указанное статическое поле не может быть найдено.
NoSuchFieldError
: если указанное статическое поле не может быть найдено.
ExceptionInInitializerError
: если инициализатор класса перестал работать из-за исключения.
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.
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.
fieldID
: статический полевой ID.
value
: новое значение поля.
jmethodID GetStaticMethodID(JNIEnv *env, jclass clazz,
const char *name, const char *sig);
Возвращает ID метода для статического метода класса. Метод определяется его именем и подписью.
GetStaticMethodID()
заставляет неинициализированный класс быть инициализированным.
env
: указатель на интерфейс JNI.
clazz
: объект класса Java.
name
: статическое имя метода в 0 завершенном изменило строку UTF-8.
sig
: сигнатура метода в 0 завершенном изменила строку UTF-8.
Возвращает ID метода, или NULL
если работа перестала работать.
NoSuchMethodError
: если указанный статический метод не может быть найден.
ExceptionInInitializerError
: если инициализатор класса перестал работать из-за исключения.
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.
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);
Создает новый массив, содержащий объекты в классе elementClass
. Все элементы первоначально устанавливаются в initialElement
.
env
: указатель на интерфейс JNI.
length
: размер массива.
elementClass
: класс элемента массива.
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
: если класс value
не подкласс класса элемента массива.
ArrayType, Новый <PrimitiveType> Массив(JNIEnv *env, jsize length);
Семейство операций, используемых, чтобы создать новый примитивный объект массива. Таблица 4-8 описывает определенных примитивных конструкторов массива. Следует заменить Новый <PrimitiveType> Массив с одним из фактических примитивных имен подпрограммы конструктора массива от следующей таблицы, и заменить ArrayType соответствующим типом массива для той подпрограммы.
Индексы в таблице функции интерфейса JNIEnv.
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.
env
: указатель на интерфейс JNI.
array
: объект массива Java.
elems
: указатель, чтобы выстроить элементы.
mode
: режим выпуска.
пусто Получите ArrayRegion <PrimitiveType>(JNIEnv *env,
ArrayType
array,
NativeType
jsize start, jsize len,*buf);
Семейство функций, которое копирует область примитивного массива в буфер.
Следующая таблица описывает определенные примитивные средства доступа элемента массива. Следует сделать следующие замены:
Индексы в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
array
: массив Java.
start
: начальное значение индекса.
len
: число элементов, которое будет скопировано.
buf
: целевой буфер.
ArrayIndexOutOfBoundsException
: если один из индексов в области не допустим.
void
Набор <PrimitiveType> ArrayRegion(JNIEnv *env,
ArrayType
array,
константа NativeType
jsize start, jsize len,*buf);
Семейство функций, которое копирует назад область примитивного массива от буфера.
Следующая таблица описывает определенные примитивные средства доступа элемента массива. Следует сделать следующие замены:
Индексы в таблице функции интерфейса JNIEnv.
ПАРАМЕТРЫ:
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);
Регистрирует собственные методы в классе, определенном clazz
параметр. methods
параметр определяет массив JNINativeMethod
структуры, которые содержат имена, подписи, и указатели функции собственных методов. name
и signature
поля структуры JNINativeMethod являются указателями на измененные строки UTF-8. nMethods
параметр определяет число собственных методов в массиве. JNINativeMethod
структура определяется следующим образом:
У указателей функции номинально должна быть следующая подпись:
Индекс 215 в таблице функции интерфейса JNIEnv.
env
: указатель на интерфейс JNI.
clazz
: объект класса Java.
methods
: собственные методы в классе.
nMethods
: число собственных методов в классе.
Возвраты “0” на успехе; возвращает отрицательную величину при отказе.
NoSuchMethodError
: если указанный метод не может быть найден или если метод не является собственным.
jint UnregisterNatives(JNIEnv *env, jclass clazz);
Нерегистрирует собственные методы класса. Класс возвращается к состоянию прежде, чем это было соединено или зарегистрировано в его собственных функциях метода.
Эта функция не должна использоваться в нормальном собственном коде. Вместо этого это обеспечивает специальные программы способ перезагрузить и повторно соединить собственные библиотеки.
env
: указатель на интерфейс JNI.
clazz
: объект класса Java.
Возвраты “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 или объект класса.
Возвраты “0” на успехе; возвращает отрицательную величину при отказе.
jint MonitorExit(JNIEnv *env, jobject obj);
Текущий поток должен быть владельцем монитора, связанного с базовым объектом Java, упомянутым obj
. Поток постепенно уменьшает счетчик, указывающий на число раз, это ввело этот монитор. Если значение счетчика становится нулем, текущий поток выпускает монитор.
Собственный код не должен использовать MonitorExit
выходить из монитора, вводимого через синхронизируемый метод или a monitorenter
Инструкция виртуальной машины Java.
env
: указатель на интерфейс JNI.
obj
: нормальный объект Java или объект класса.
Возвраты “0” на успехе; возвращает отрицательную величину при отказе.
IllegalMonitorStateException
: если текущему потоку не принадлежит монитор.
NIO-связанные точки входа позволяют собственный код доступу java.nio
прямые буферы. Содержание прямого буфера может, потенциально, находиться в собственной памяти за пределами собранной "мусор" "кучи" дежурного блюда. Для получения информации о прямых буферах, пожалуйста, см. Новые API ввода-вывода и спецификацию класса java.nio.ByteBuffer.
Каждая реализация виртуальной машины 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” на успехе; возвращает отрицательную величину при отказе.
Содержание | Предыдущий | Следующий |