У меня проблема с JNI, с которой, я надеюсь, кто-то может мне помочь.
Я пытаюсь вызвать конструктор класса Java с именем LUSOutputJNI из собственного потока.
Он продолжает давать сбой в FindClass (...) этого конкретного класса.
Вот код:
LOGE("1");
JNIEnv *env = NULL;
LOGE("2");
int res = -1;
res = g_vm->AttachCurrentThread(&env, NULL);
if(env == NULL)
{
LOGE("env is NULL, AttachCurrentThread failed");;
}
if(res >= 0)
LOGE("AttachCurrentThread was successful");
jclass clazz = NULL;
jmethodID cid;
jclass clazzESEngine;
jmethodID callbackid;
jobject jCoreOut;
static jfieldID fid_ActionState = NULL;
static jfieldID fid_nSpeed = NULL;
static jfieldID fid_nType = NULL;
static jfieldID fid_nInProcess = NULL;
static jfieldID fid_nX = NULL;
static jfieldID fid_nY = NULL;
LOGE("3");
static const char* const ECOClassName = "lus/android/sdk/LUSOutputJNI";
//static const char* const ECOClassName = "android/widget/TextView";
clazz = env->FindClass(ECOClassName);
if (clazz == NULL) {
LOGE("Can't find class LUSOutputJNI");
}
else
LOGE("lus/android/sdk/LUSOutputJNI was found, YEY!!");
LOGE("4");
cid = env->GetMethodID(clazz,"<init>", "()V");
LOGE("5");
jCoreOut = env->NewObject(clazz, cid);
LOGE("6");
Вот вывод logcat, когда он выходит из строя:
E/lusCore_JNI( 3040): 1
E/lusCore_JNI( 3040): 2
E/lusCore_JNI( 3040): AttachCurrentThread was successful
E/lusCore_JNI( 3040): 3
E/lusCore_JNI( 3040): Can't find class LUSOutputJNI
E/lusCore_JNI( 3040): 4
W/dalvikvm( 3040): JNI WARNING: JNI method called with exception raised
Наблюдения:
- Я получаю результат от AttachCurrentThread, который равен 0, что означает, что это вложение прошло успешно + указатель env больше не равен NULL.
- Я уверен в объявлении имени пакета LUSOutputJNI (трижды проверил это ...)
- Когда я пытаюсь запустить FindClass (..) с более популярным именем класса, таким как android / widget /TextView, я получаю положительное совпадение.Это там.Это означает, что присоединение потока и переменные env в порядке.(Могу ли я это предположить?)
- Когда я пытаюсь запустить следующий код из метода JNI, в котором запущен поток JNI, он без проблем находит класс LUSOutputJNI.
Что я делаю не так?
Помощь будет высоко ценится:)
Спасибо за ваше время,
Ита