@@ -117,6 +117,20 @@ jvalueType javaGetType(JNIEnv *env, jclass type) {
117117jclass javaFindClass (JNIEnv* env, std::string& className) {
118118 std::string searchClassName = className;
119119 std::replace (searchClassName.begin (), searchClassName.end (), ' .' , ' /' );
120+
121+ // Alternate find class trying to fix Class.forName
122+ // jclass threadClazz = env->FindClass("java/lang/Thread");
123+ // jmethodID thread_getCurrentThread = env->GetStaticMethodID(threadClazz, "currentThread", "()Ljava/lang/Thread;");
124+ // jmethodID thread_getContextClassLoader = env->GetMethodID(threadClazz, "getContextClassLoader", "()Ljava/lang/ClassLoader;");
125+ //
126+ // jclass classLoaderClazz = env->FindClass("java/lang/ClassLoader");
127+ // jmethodID classLoader_loadClass = env->GetMethodID(classLoaderClazz, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");
128+ //
129+ // jobject currentThread = env->CallObjectMethod(threadClazz, thread_getCurrentThread);
130+ // jobject classLoader = env->CallObjectMethod(currentThread, thread_getContextClassLoader);
131+ // jstring searchClassNameJava = env->NewStringUTF(className.c_str());
132+ // jclass clazz = (jclass)env->CallObjectMethod(classLoader, classLoader_loadClass, searchClassNameJava);
133+
120134 jclass clazz = env->FindClass (searchClassName.c_str ());
121135 return clazz;
122136}
@@ -340,8 +354,13 @@ jobjectArray javaObjectArrayToClasses(JNIEnv *env, jobjectArray objs) {
340354 jsize objsLength = env->GetArrayLength (objs);
341355 jobjectArray results = env->NewObjectArray (objsLength, clazzClazz, NULL );
342356 for (jsize i=0 ; i<objsLength; i++) {
343- jclass objClazz = env->GetObjectClass (env->GetObjectArrayElement (objs, i));
344- env->SetObjectArrayElement (results, i, objClazz);
357+ jobject elem = env->GetObjectArrayElement (objs, i);
358+ if (elem == NULL ) {
359+ env->SetObjectArrayElement (results, i, NULL );
360+ } else {
361+ jclass objClazz = env->GetObjectClass (elem);
362+ env->SetObjectArrayElement (results, i, objClazz);
363+ }
345364 }
346365 return results;
347366}
0 commit comments