Mam problem z JNI, który mam nadzieję, że ktoś może mi pomóc.
Próbuję wywołać konstruktora klasy Java o nazwie LUSOutputJNI z natywnego wątku.
Uszkadza FindClass (...) tej konkretnej klasy.Problemy z wywołaniem metody Java z natywnego wątku przy użyciu JNI (C++)
Oto kod:
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");
Oto wynik logcat od kiedy to się nie powiedzie:
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
Obserwacje:
- uzyskać wynik z DołączCurrentThread, który jest 0, który h oznacza, że ten załącznik się powiódł + wskaźnik env nie jest już NULL.
- Jestem pewien, że deklaracja nazwy pakietu LUSOutputJNI (potrójnie sprawdziła się ...)
- Kiedy próbuję uruchomić FindClass (..) z bardziej popularną nazwą klasy, taką jak android/widget/TextView, I uzyskać pozytywny wynik. Jest tam. Znaczenie przyłączenia wątku i zmiennych env jest w porządku. (Czy mogę to założyć?)
- Kiedy próbuję uruchomić następujący kod z metody JNI, która ma działający wątek JNI, bez problemu odnajduje klasę LUSOutputJNI.
Co robię źle?
pomoc będzie mile widziane :)
Dziękuję za poświęcony czas,
Ita
Wszelkie odniesienia do tej klasy "LUSOutputJNI"? –
@ K-ballo: To prawdopodobnie klasa wewnętrzna. –
@Ita: Czy Twój inicjator statyczny LUSOutputJNI zgłasza wyjątek? Powinieneś wydrukować wyjątek podniesiony. –