jni getMethodID 在用于获取构造函数的 ID 时返回 Null


I have assigned jvm to global variable in a function using
int status = (*jenv)->GetJavaVM(jenv, &jvm);
if(status != 0) {
    printf(" Fail!n");
         }

classNameC 是一个全局变量,它的类没有构造函数。然后在其他函数中,我像这样使用它:

JNIEnv *env;
printf("starting functionn");
(*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL);
printf("thread attachedn");
jclass local = (*env)->FindClass(env,classNameC);
if(local!=NULL)
{
printf("1st class foundn");
}
jmethodID constructor=(*env)->GetMethodID(env,local,"<init>","()V");
if(constructor==NULL)
{
printf("1st Constructoris NULLn");
}
else
{
printf("1st Constructor createdn");
}
jobject classObject=(*env)->NewObject(env,local,constructor);
if(classObject==NULL)
{
printf("1st object is  NULLn");
}
else
{
printf("1st object is  createdn");
}
jclass local1 = (*env)->FindClass(env,"SWIGTYPE_p_void");
if(local1==NULL)
{
printf("SWIGTYPE p void class is NULLn");
}
else
{
printf("SWIGTYPE p void class createdn");
}

这个构造函数有 2 个参数,一个很长,下一个是布尔值。此类有 2 个构造函数,另一个没有参数,并以 0 初始化成员。

jmethodID constructor1=(*env)->GetMethodID(env,local1,"<init>","(J;Z;)V");
if(constructor1==NULL)
{
printf("SWIGTYPE p void constructor is NULLn");
}
else
{
printf("SWIGTYPE p void constructor is createdn");
}

当我运行它时,它成功打印到 SWIGTYPE p void 类创建并且 SWIGTYPE p void 构造函数为 NULL,然后它给出了此错误:

Java 运行时环境检测到致命错误:

SIGSEGV (0xb( at pc=0x00007f7ec503fa7b, pid=25307, tid=140182441326336

JRE 版本: Java(TM( SE 运行时环境 (7.0_65-b17( (build 1.7.0_65-b17( Java VM: Java HotSpot(TM( 64-bit Server VM (24.65-b04 混合模式 linux-amd64 压缩哎呀( 有问题的帧:V [libjvm.so+0x657a7b] JNI_ArgumentPusherVaArg::JNI_ArgumentPusherVaArg(_jmethodID*, __va_list_tag*(+0x1b

写入核心转储。默认位置: /home/manish/rathi/libdmc/dmcore/include/core or core.25307

包含更多信息的错误报告文件另存为: /home/manish/rathi/libdmc/dmcore/include/hs_err_pid25307.log

如果您想

提交错误报告,请访问:
http://bugreport.sun.com/bugreport/crash.jsp

已中止(核心已转储(

你找到constructor方法 ID;但你声称这个类没有构造函数。这意味着,GetMethodID(env,local,"<init>","(V)V")将返回 0。若要为不带参数的方法指定签名,请使用 "()V"

相关内容

  • 没有找到相关文章

最新更新