diff --git a/src/corelib/kernel/qjnienvironment.cpp b/src/corelib/kernel/qjnienvironment.cpp index 5aee05bce69..8c1f19ce828 100644 --- a/src/corelib/kernel/qjnienvironment.cpp +++ b/src/corelib/kernel/qjnienvironment.cpp @@ -286,12 +286,7 @@ bool QJniEnvironment::registerNativeMethods(const char *className, JNINativeMeth if (!classObject.isValid()) return false; - - jclass clazz = d->jniEnv->GetObjectClass(classObject.object()); - const bool result = registerNativeMethods(clazz, methods, size); - d->jniEnv->DeleteLocalRef(clazz); - - return result; + return registerNativeMethods(classObject.objectClass(), methods, size); } /*! diff --git a/src/corelib/kernel/qjniobject.cpp b/src/corelib/kernel/qjniobject.cpp index c443746ff4d..dfb0dbd36dd 100644 --- a/src/corelib/kernel/qjniobject.cpp +++ b/src/corelib/kernel/qjniobject.cpp @@ -779,10 +779,10 @@ QJniObject::~QJniObject() jstring jstring = string.object(); \endcode - \note The returned object is still kept live by this QJniObject. To keep the - object live beyond the lifetime of this QJniObject, for example to record it + \note The returned object is still kept alive by this QJniObject. To keep the + object alive beyond the lifetime of this QJniObject, for example to record it for later use, the easiest approach is to store it in another QJniObject with - a suitable lifetime. Alternatively, you can make a new global reference to the + a suitable lifetime. Alternatively, you may create a new global reference to the object and store it, taking care to free it when you are done with it. \snippet jni/src_qjniobject.cpp QJniObject scope @@ -792,6 +792,36 @@ jobject QJniObject::object() const return javaObject(); } +/*! + \fn jclass QJniObject::objectClass() const + + Returns the class object held by the QJniObject as a \c jclass. + + \note The returned object is still kept alive by this QJniObject. To keep the + object alive beyond the lifetime of this QJniObject, for example to record it + for later use, the easiest approach is to store it in another QJniObject with + a suitable lifetime. Alternatively, you may create a new global reference to the + object and store it, taking care to free it when you are done with it. + + \since 6.2 +*/ +jclass QJniObject::objectClass() const +{ + return d->m_jclass; +} + +/*! + \fn QByteArray QJniObject::className() const + + Returns the name of the class object held by the QJniObject as a \c QByteArray. + + \since 6.2 +*/ +QByteArray QJniObject::className() const +{ + return d->m_className; +} + QJniObject QJniObject::callObjectMethodV(const char *methodName, const char *signature, va_list args) const diff --git a/src/corelib/kernel/qjniobject.h b/src/corelib/kernel/qjniobject.h index e7bf4f3007f..d9e11c49346 100644 --- a/src/corelib/kernel/qjniobject.h +++ b/src/corelib/kernel/qjniobject.h @@ -68,6 +68,9 @@ public: return static_cast(javaObject()); } + jclass objectClass() const; + QByteArray className() const; + template T callMethod(const char *methodName, const char *signature, ...) const {