Spec-Zone.ru › Qt 6.1

Класс QJniEnvironment

Класс QJniEnvironment предоставляет доступ к среде JNI (JNIEnv). Подробнее...

Заголовок: #include <QJniEnvironment>
CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
С момента: Qt 6.1
  • Список всех членов, включая унаследованные

Типы публичного доступа

перечисление enum class OutputMode { Silent, Verbose }

Функции публичного доступа

QJniEnvironment()
~QJniEnvironment()
bool checkAndClearExceptions(QJniEnvironment::OutputMode outputMode = OutputMode::Verbose)
jclass findClass(const char *className)
JNIEnv * jniEnv() const
bool registerNativeMethods(const char *className, JNINativeMethod [] methods, int size)
JNIEnv & operator*() const
JNIEnv * operator->() const

Статические члены публичного доступа

bool checkAndClearExceptions(JNIEnv *env, QJniEnvironment::OutputMode outputMode = OutputMode::Verbose)
JavaVM * javaVM()

Подробное описание

При работе с JNI, класс JNIEnv является указателем на таблицу функций и членом функции для каждой функции JNI, которая опосредованно обращается к таблице. JNIEnv предоставляет большинство функций JNI. Каждая функция нативного C++ получает JNIEnv в качестве первого аргумента. Среда JNI не может быть общих между потоками.

Поскольку JNIEnv не выполняет много проверок ошибок, таких как проверка и очистка исключений, QJniEnvironment позволяет легко это сделать.

Примечание: Данный API был разработан и протестирован для использования с Android. Он не был протестирован для других платформ.

Документация по типам членов

перечисление enum class QJniEnvironment::OutputMode

Константа Значение Описание
QJniEnvironment::OutputMode::Silent 0 Исключения очищаются в молчании
QJniEnvironment::OutputMode::Verbose 1 Печатает исключения и их стек-трейс в качестве ошибки в поток stderr.

Документация по функциям-членам

QJniEnvironment::QJniEnvironment()

Создает новый объект JNI Environment и присоединяет текущий поток к Java VM.

QJniEnvironment::~QJniEnvironment()

Отсоединяет текущий поток от Java VM и уничтожает объект QJniEnvironment. Это очистит любые ожидающие исключения, вызвав checkAndClearExceptions().

bool QJniEnvironment::checkAndClearExceptions(QJniEnvironment::OutputMode outputMode = OutputMode::Verbose)

Очищает любые ожидающие исключения, либо в молчании, либо с сообщением стека вызовов, в зависимости от outputMode.

В отличие от QJniObject, который обрабатывает исключения внутри, если вы делаете вызовы JNI напрямую через JNIEnv, вам нужно очистить любые потенциальные исключения после вызова с помощью этой функции. Дополнительную информацию об вызовах JNIEnv которые могут вызвать исключение, см. в JNI Functions.

Возвращает true когда ожидающее исключение было очищено.

[static] bool QJniEnvironment::checkAndClearExceptions(JNIEnv *env, QJniEnvironment::OutputMode outputMode = OutputMode::Verbose)

Очищает любые ожидающие исключения для env, либо в молчании, либо с сообщением стека вызовов, в зависимости от outputMode. Это полезно, когда у вас уже есть указатель JNIEnv , например, в реализации нативной функции.

В отличие от QJniObject, который обрабатывает исключения внутри, если вы делаете вызовы JNI напрямую через JNIEnv, вам нужно очистить любые потенциальные исключения после вызова с помощью этой функции. Дополнительную информацию об вызовах JNIEnv которые могут вызвать исключение, см. в JNI Functions.

Возвращает true когда ожидающее исключение было очищено.

jclass QJniEnvironment::findClass(const char *className)

Ищет className, используя все доступные загрузчики классов. Qt на Android использует пользовательский загрузчик классов для загрузки всех файлов .jar, и он должен использоваться для поиска любых классов, созданных этим загрузчиком, поскольку эти классы не видны при использовании стандартного загрузчика классов.

Возвращает указатель на класс или null, если он не найден.

Пример использования этой функции – поиск пользовательского класса, а затем вызов его метода. Следующий фрагмент кода создает экземпляр класса CustomClass и затем вызывает метод printFromJava():

QJniEnvironment env;
jclass javaClass = env.findClass("org/qtproject/example/android/CustomClass");
QJniObject classObject(javaClass);

QJniObject javaMessage = QJniObject::fromString("findClass example");
classObject.callMethod<void>("printFromJava",
                             "(Ljava/lang/String;)V",
                             javaMessage.object<jstring>());

[static] JavaVM *QJniEnvironment::javaVM()

Возвращает интерфейс Java VM для текущего процесса. Хотя могут быть и несколько Java VM на процесс, Android допускает только один.

JNIEnv *QJniEnvironment::jniEnv() const

Возвращает указатель на JNIEnv среды JNI.

bool QJniEnvironment::registerNativeMethods(const char *className, JNINativeMethod [] methods, int size)

Регистрирует методы Java в массиве methods размером size, каждый из которых может вызывать нативные функции C++ из класса className. Эти методы необходимо зарегистрировать перед любыми попытками их вызова.

Возвращает True, если регистрация выполнена успешно, в противном случае False.

Каждый элемент в массиве методов состоит из:

  • Название метода Java
  • Подпись метода
  • Функции C++, которые будут выполняться
JNINativeMethod methods[] {{"callNativeOne", "(I)V", reinterpret_cast<void *>(fromJavaOne)},
                           {"callNativeTwo", "(I)V", reinterpret_cast<void *>(fromJavaTwo)}};
QJniEnvironment env;
env.registerNativeMethods("org/qtproject/android/TestJavaClass", methods, 2);

JNIEnv &QJniEnvironment::operator*() const

Возвращает объект JNIEnv среды JNI.

JNIEnv *QJniEnvironment::operator->() const

Предоставляет доступ к указателю JNIEnv среды JNI.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qjnienvironment.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API