我一直在JNI中创建一些代码并且大部分代码工作正常但我无法从C ++创建Java对象的实例,因为我的Java IDE给了我以下错误:
Java Runtime Environment检测到致命错误:
EXCEPTION_ACCESS_VIOLATION(0xc0000005)at pc = 0x0000000070e1e0d2,pid = 10100,tid = 0x0000000000000d90
JRE版本:Java(TM)SE运行时环境(8.0_101-b13)(版本1.8.0_101-b13) Java VM:Java HotSpot(TM)64位服务器VM(25.101-b13混合模式windows-amd64压缩oops) 有问题的框架: V [jvm.dll + 0x15e0d2]
无法编写核心转储。默认情况下,在Windows的客户端版本
上未启用小型转储包含更多信息的错误报告文件保存为: C:\ Users \ Alienware \ Documents \ Netbeans Projects \ NativeTest \ hs_err_pid10100.log
如果您想提交错误报告,请访问: http://bugreport.java.com/bugreport/crash.jsp
我正在尝试创建的Java对象是:
public class ConstructorObject {
public ConstructorObject() {
System.out.println("Hello World!");
}
}
,本机类是:
public class NativeNewObject
{
static {
System.loadLibrary("NativeLibrary");
}
private native void callConstructorObject0();
public void callConstrtuctorObject() {
callConstructorObject0();
}
}
C ++代码是:
JNIEXPORT void JNICALL Java_main_NativeNewObject_callConstructorObject0(JNIEnv *e, jobject obj) {
jclass c = e->FindClass("ConstructorObject");
jmethodID mid = e->GetMethodID(c, "<init>", "()V");
jobject newObj = e->NewObject(c, mid);
}
感谢。
答案 0 :(得分:3)
您的班级查找是否成功?您是否看到c
的值包含除NULL之外的其他内容?
答案 1 :(得分:1)
不确定是否有帮助,我在构造函数获取方面遇到了问题,我遇到了这样的事情:
jmethodID mid = e->GetMethodID(c, "<init>", "()V");
我将其更改为
jmethodID mid = e->GetMethodID(c, "<init>", "void(V)");