我想从我的JNI Android代码调用构造函数;但不知何故,它失败,以下例外.. 我相信我失去了一些非常小的东西;但我无法弄清楚......任何人都可以请指出?在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个构造函数,当我调用方法getAge()返回岁
Employee()
Employee(int age)
int getAge();
令人惊讶的方法..呼叫经过并提取年龄...但是,当我尝试调用“员工构造函数”,然后尝试getAge()这个异常抛出...
莫名其妙它无法找到类: 我尝试过使用GetObjectClass的所有可能性()
This works;当我通过呼叫中的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, "", "(I)V"); // BOOM SCREWED HERE .. !!
}
但每次我的代码来env->的GetMethodID - 虚拟机中止...
2012-02-15
Pranav
+0
你可以检查employeeClass变量是否不为NULL? –
2012-02-15 03:48:19
+0
我不明白你的第二个代码片段。 localRefCls有什么范围,什么时候分配? –
2012-02-15 16:55:08
+0
@Martins:employeeClass不为NULL –
2012-02-18 01:35:37