在JNI中创建新对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JNI中创建新对象相关的知识,希望对你有一定的参考价值。

我一直在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之外的其他内容?

以上是关于在JNI中创建新对象的主要内容,如果未能解决你的问题,请参考以下文章

Sonata Admin:无法在产品中创建新对象

切片表示法不会在内存中创建新副本

Criteria Builder 在 Select 语句中创建新对象

如何在具有角度注入参数的打字稿中创建新对象

如何在 Python 中创建新的未知或动态/扩展对象

VueJS $set 没有在对象数组中创建新属性