java - JNI NewIntArray() 无法创建大数组

标签 java c++ c android-ndk java-native-interface

我使用 JNI 调用通过 Android 类位图加载 PNG 文件使用本指南 http://lol.zoy.org/blog/2011/3/2/load-pngs-using-android-ndk .
在我尝试从位图中获取像素数据之前,这一切都完美无缺。我无法创建适合图像数据 (512*256) 的 jint 数组,应用程序在此行崩溃。我做了一些测试,它只对大小 <= 85000 的 jint 数组(在我的 HTC Desire 上)有效而不会崩溃。 我认为这是一些内存不足的错误,但我在 logcat 中没有收到相关错误,我尝试只创建一个 jint 数组而没有任何其他代码它也会崩溃。

#include <jni.h>    

int load_image_png(const char* path, GLuint* width, GLuint* height, void** image_data){
//Skip part what works fine - get bitmap width and height
//width=512, height=256

 jintArray array = g_env->NewIntArray(width*height);//FAIL OVERHERE

 jint* pixels = g_env->GetIntArrayElements(array, 0);
 *image_data = pixels;

 //closing a bitmap work fine too

 return 0;

附言如果有人可以提供从 Java 代码加载 png 的替代方法(没有 pnglib 和像 http://androgeek.info/?p=275 中的 native 函数),那将是很棒的

最佳答案

异常不会在 JNI 中自动发生。您必须编写代码来触发它们。即它将错误存储在某处,您必须添加代码来说明您希望在何处触发异常。

http://java.sun.com/docs/books/jni/html/exceptions.html


来自 http://www.google.co.uk/search?q=java+png+library

http://code.google.com/p/javapng/

http://code.google.com/p/pngj/

我不知道哪个更好。

关于java - JNI NewIntArray() 无法创建大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9174228/

相关文章:

java - 弗林克 : Wrap executable non-flink jar to run it in a flink cluster

c++ - LIBAV MJPEG编码和霍夫曼表

c++ - C++11 中的非阻塞信号量?

c++ - 从 B 转换为基类 A

java - 如何使用匹配的 DER 私钥解密 PEM 公钥加密字节数组?

c - 将 Haskell 行翻译成 C

java - 多线程中的单例 - 各种场景

java - 检查行是否包含单词

java - @列名忽略JPA

c - 为什么我的快速排序在大量输入时会崩溃?