簡體   English   中英

從JNI實例化Java類

[英]Instantiate Java class from JNI

我需要在本機代碼中創建Java類的實例。 為此,我使用以下C代碼:

jobject Java_com_mypackage__myClass_myMethod(JNIEnv* env, jobject thiz, jint index){
    int fd = pDevs[index].ufds.fd; // fd = open(....); it's a input/eventX file.
    jclass class = (*env)->FindClass(env,"com/mypackage/ClassName");
    jmethodID mid = (*env)->GetMethodID(env,class,"<init>","(Ljava/lang/String;)V");
    return (*env)->NewObject(env,class,mid,(*env)->NewStringUTF(env, pDevs[index].device_path));
}

但是,當我調用myMethod時,我一直收到致命信號11(SIGSEGV)。 代碼是否錯誤?

您應該使用日志記錄/調試器來查找發生分段錯誤的位置。 最簡單的方法是按此處所述使用android記錄系統

jclass class = (*env)->FindClass(env,"com/mypackage/ClassName");
if(class == null)
{
  __android_log_print(ANDROID_LOG_VERBOSE, "TAG", "class is null");
}

例如,如果ClassName是某些活動的內部類,則應使用com / mypackage / ActivityName#ClassName而不是com / mypackage / ClassName。 但是我只能在提供日志之前猜測。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM