在JNI中获取一个int数组

时间:2010-06-29 19:53:26

标签: java c arrays java-native-interface

我已经看到了一些关于如何使用JNI将C数组正确传递到Java的问题,但我遇到了相反的问题: 如何使用JNI在C中正确调用int数组getter方法。具体来说,我想将BufferedImage实例传递给C,并在此BufferedImage实例上调用“public int [] getRGB()”方法。

我的理解是所有数组都是Java中的对象,所以我认为我应该调用: (* ENV) - > CallObjectMethod() 为了得到这个数组,但是当我尝试这个时,我的JVM崩溃了。有什么建议吗?

2 个答案:

答案 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);

没有测试和编译,但我就是这样做的:)

干杯

相关问题
最新问题