FindClass не может найти пользовательский класс Java - PullRequest
5 голосов
/ 30 августа 2011

У меня чисто нативное приложение, так как я использую android_native_app_glue и точка входа в мое приложение

 android_main(..)

У меня также есть класс типа помощника Java:

 package abc.def.ghi
 public class MyJavaClass extends Activity
 {
      public void callback() 
      {
          Log.v(TAG, "In MyJavaClass");
      }
 }

Iхочу вызвать метод обратного вызова из native.Я делаю так:

jclass myClass = env->FindClass("abc/def/ghi/MyJavaClass");
if( myClass == NULL )
    LOGI("myClass null");
jmethodID mid = m_pEnv->GetMethodID(myClass, "callback", "()V");
if( mid == NULL )
    LOGI("MID null");
m_pEnv->CallVoidMethod(myClass, mid);

Однако это приводит к сообщению, что myClass имеет значение null.Мой указатель 'env' должен быть в порядке, потому что когда я передаю "android / os / build" в FindClass, он находит его, но не может найти свой пользовательский класс.

В LOGCAT я вижу: "Предупреждение JNI:Невозможно вызвать Labc / def / ghi; обратный вызов для экземпляра Ljava / Lang / Class; "

Я думаю, это означает, что что-то не так с первым параметром моего CallVoidMethod.В других примерах я заметил, что большинство людей выполняют свой CallVoidMethod в функции с сигнатурой, сгенерированной javah, и они используют параметр obj в своих CallVoidMethod:

  JNIEXPORT void JNICALL function(JNIEnv *env, jobject obj, jstring s)

Однако я не могуиспользуйте это, потому что точка входа моего приложения в нативном.

1 Ответ

0 голосов
/ 03 декабря 2015

Однако это приводит к сообщению, что myClass имеет значение null.Мой указатель 'env' должен быть в порядке, потому что когда я передаю "android / os / build" в FindClass, он находит его, но не может найти мой пользовательский класс.

Это может означать, что ваши пользовательские классы не являютсяна пути к классам.

Обратите внимание, что при создании виртуальной машины вы можете передавать параметры, включая настройку пути к классам для включения текущего каталога (или где угодно).

...