我一直在JNI中创建一些代码,其中大部分工作正常,但是我无法用C ++创建Java对象的实例,因为我的Java IDE给了我以下错误:
Java运行时环境检测到致命错误:
pc = 0x0000000070e1e0d2,pid = 10100,tid = 0x0000000000000d90的EXCEPTION_ACCESS_VIOLATION(0xc0000005)
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);
}
谢谢。
你的班级查找成功了吗?您是否看到c
的值包含除NULL之外的其他内容?