Jvm 调用“时JNI代码中的分段错误”;CallIntMethod(jclass、jmethodId等) 我的JNI代码包括从C++主程序调用一些java函数(.jar文件)。

Jvm 调用“时JNI代码中的分段错误”;CallIntMethod(jclass、jmethodId等) 我的JNI代码包括从C++主程序调用一些java函数(.jar文件)。,jvm,java-native-interface,segmentation-fault,Jvm,Java Native Interface,Segmentation Fault,代码编译得很好,但在执行过程中我得到: 分段故障(堆芯转储) 我运行GNU gdb进行调试,在调用此方法期间发现以下内容: if(mid != 0) { doub = env->CallIntMethod(cls,mid,10); 程序收到信号SIGSEGV,分段故障。 0x00000000678856ed在jvm中!JNI_GetCreatedJavaVMs() from/cygdrive/c/Program Files/Java/jdk1.8.0_05/jre/bin/server/

代码编译得很好,但在执行过程中我得到:

分段故障(堆芯转储)

我运行GNU gdb进行调试,在调用此方法期间发现以下内容:

if(mid != 0) {
doub = env->CallIntMethod(cls,mid,10);
程序收到信号SIGSEGV,分段故障。 0x00000000678856ed在jvm中!JNI_GetCreatedJavaVMs() from/cygdrive/c/Program Files/Java/jdk1.8.0_05/jre/bin/server/jvm.dll

我还检查了是否通过返回值找到了类(JNIFindClass函数)以及是否创建了JVM(JNI_CreateJavaVM函数),一切似乎都很好

调试结束时,线程退出,代码为35584:

[线程4632.0x1304退出,代码为35584]

我没有找到关于这个值的任何信息,除了它意味着在指向可执行文件所需内容的路径中存在问题。。。有什么想法吗? 我为.jar文件指定了如下路径:

char op[] = "-Djava.class.path=D:\\path\\tojar/MyJar.jar;D:\\path\\toclass";
options[0].optionString = op;
多谢各位议员:)


ps:如果你认为发布代码有帮助,请在评论中通知我

CallIntMethod
希望第一个参数是接收者(即
这个
)对象。

当您调用的方法是静态的时,请使用
CallStaticIntMethod

Yes!谢谢你们,当你们谈到静态方法时,我忘了如果它们不是,你们应该用构造函数的id声明一个新对象!这个对象将是CallIntMethod()中的接收者,因此如果我想调用非静态函数,我应该编写以下代码:'mid=env->GetMethodId(cls,“,”()V”);'obj=env->NewObject(cls,mid);'