在JNI中创建新对象

问题描述 投票:-2回答:1

我一直在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);
}

谢谢。

java c++ java-native-interface
1个回答
3
投票

你的班级查找成功了吗?您是否看到c的值包含除NULL之外的其他内容?

© www.soinside.com 2019 - 2024. All rights reserved.