我已经看到了一些关于如何使用JNI将C数组正确传递到Java的问题,但我遇到了相反的问题: 如何使用JNI在C中正确调用int数组getter方法。具体来说,我想将BufferedImage实例传递给C,并在此BufferedImage实例上调用“public int [] getRGB()”方法。
我的理解是所有数组都是Java中的对象,所以我认为我应该调用: (* ENV) - > CallObjectMethod() 为了得到这个数组,但是当我尝试这个时,我的JVM崩溃了。有什么建议吗?
答案 0 :(得分:1)
如果从C ++内部调用,则env指针可能无效。您必须手动绑定JVM实例。类似C中的以下内容:
JNIEnv *env;
(*g_vm)->AttachCurrentThread (g_vm, (void **) &env, NULL);
你的g_vm指针应该来自DLL中的JNI设置函数调用,你需要将它存储起来以供日后使用。
答案 1 :(得分:1)
只是为了记录,我认为你所做的是正确的。以下代码可以解决这个问题(由于你没有提供代码,我不知道你究竟叫什么):
jobject jBufferedImage = ...;
...
jclass clazz = (*env)->FindClass("java/awt/Image/BufferedImage");
jmethodID jMID = (*env)->GetMethodID(clazz, "getRGB", "()[I");
jintArray rgbValues = (jintArray) (*env)->CallObjectMethod(jBufferedImageObject, jMID);
没有测试和编译,但我就是这样做的:)
干杯