Я пытаюсь вызвать конструктор из моего кода JNI Android;но каким-то образом это терпит неудачу со следующим исключением .. Я уверен, что пропускаю что-то действительно маленькое;но я не могу понять ... кто-нибудь может указать, пожалуйста?
02-14 16:56:56.689: W/dalvikvm(397): JNI WARNING: JNI method called with exception raised
02-14 16:56:56.710: W/dalvikvm(397): in Lpv/ndk/Employee;.createWithAge (I)Lpv/ndk/Employee; (GetMethodID)
02-14 16:56:56.710: W/dalvikvm(397): Pending exception is:
02-14 16:56:56.710: I/dalvikvm(397): Ljava/lang/NoClassDefFoundError;: pv.ndk.Employee;
02-14 16:56:56.723: I/dalvikvm(397): at pv.ndk.Employee.createWithAge(Native Method)
02-14 16:56:56.740: I/dalvikvm(397): Caused by:
02-14 16:56:56.740: I/dalvikvm(397): Ljava/lang/ClassNotFoundException;: pv.ndk.Employee; in loader dalvik.system.PathClassLoader[/data/app/pv.ndk-2.apk]
Вот мой код:
Класс Employee имеет 2 конструктора и метод для возврата возраста
Employee()
Employee(int age)
int getAge();
удивительно, когда я вызываю метод getAge () .. вызов проходит и извлекает возраст ... Но когда я пытаюсь вызвать "конструктор сотрудника", а затем пытаюсь получить getAge () это исключениевыброшено ...
как-то не удается найти класс: я попробовал все возможности, с которыми я сталкивался, для GetObjectClass ()
это работает;когда я передаю объект Employee при вызове
JNIEXPORT jint JNICALL Java_pv_ndk_Employee_getAgeC(JNIEnv *env, jobject callingObject, jobject employeeObject)
{
jclass employeeClass = env->GetObjectClass(employeeObject);
jmethodID midGetName = env->GetMethodID(employeeClass, "getAge", "()I");
int age = env->CallIntMethod(employeeObject, midGetName);
//other code
}
ЭТО НЕ РАБОТАЕТ;Я не уверен, почему он не может найти класс .. Я пробовал с «Lpv / ndk / Emploee», «LEmployee», «pv / ndk / Employee» .. и даже пытался использовать следующий подход:
jclass localRefCls = env->FindClass("pv/ndk/Employee");
jclass clazzEmployee = (_jclass*)env->NewGlobalRef(localRefCls);
JNIEXPORT jobject JNICALL Java_pv_ndk_Employee_createWithAge(JNIEnv *env, jobject callingObject, jint age) {
jclass employeeClass = env->FindClass("pv/ndk/Employee");
jmethodID midConstructor = env->GetMethodID(employeeClass, "<init>", "(I)V"); // BOOM SCREWED HERE .. !!
}
Но каждый раз, когда мой код приходит к env-> GetMethodID - vm Aborts ...