求助JNI的数组赋值问题【来者有分】

dinjay 高级软件工程师  2010-09-16 02:09:42
现在jni层中封装一个方法,返回一个二维的char数组,在android上编译成.so后使用没有任何问题,但是编译为X86的DLL后,在使用的时候出现异常。

异常为:ArrayStoreException
网上说是试图将错误类型的对象存储到一个对象数组时抛出的异常
但是找了半天也没有发现问题:

java层定义:

public static final native char[][] jtMFHZ_GetResult();


JNI c层:

JNIEXPORT jobjectArray JNICALL Java_com_jFreeWrite_jFreeWrite_jtMFHZ_1GetResult
(JNIEnv *env, jclass cls)
{
jobjectArray result;
int i = 0;
int k = 0;
jclass stArrCls = (*env)->FindClass(env, "[S");//返回的是char[][]型,难道是这里的问题?
if( NULL == stArrCls ) return NULL;

result = (*env)->NewObjectArray(env, 10*30, stArrCls, NULL);//返回一个10*30的二维数组
for(i = 0; i < 10; ++i)
{
int j=0;
jchar tmp[30]={0};
jcharArray iarr = (*env)->NewCharArray(env, 30);
if(iarr == NULL)
return NULL;
for(j=0;j<30;++j)
{
if ( 0 == g_RecogResult[i][j] ) //g_RecogResult确定是没问题的,
break;
tmp[j] = g_RecogResult[i][j];
}
(*env)->SetCharArrayRegion(env, iarr, 0, 30, tmp);//init iarr
(*env)->SetObjectArrayElement(env, result, i, iarr);//init result index of i
(*env)->DeleteLocalRef(env, iarr);
}

LOG(PATH,"end and return");//这里的LOG确实打出来了
return result;//g_RecogResult;
}


return前的log打印出来了,而且数组赋值的功能也都实现了,我也之前打印了出来,发现result内容没问题。但是不知道为什么在java工程中调用这个函数就报ArrayStoreException
求教!!!!
...全文
292 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dinjay 2010-09-16
今天晚上就结
回复
完美灬缺陷 2010-09-16
来者有分
回复
解未知数 2010-09-16
只能帮你顶了,顺便接分..
回复
dinjay 2010-09-16
已成散分贴
回复
dinjay 2010-09-16
解决了
jclass stArrCls = (*env)->FindClass(env, "[S");//返回的是char[][]型,难道是这里的问题?
就是这里的问题,返回char二维数组型,FindClass中要用"[C"
回复
拼好了 2010-09-16
JNIEXPORT jobjectArray JNICALL Java_com_jFreeWrite_jFreeWrite_jtMFHZ_1GetResult (JNIEnv *env, jclass cls)
回复
alidion 2010-09-16
帮你顶....
回复
dinjay 2010-09-16
自己顶....
回复
相关推荐
发帖
J2ME
创建于2007-09-28

1.3w+

社区成员

Java J2ME
申请成为版主
帖子事件
创建了帖子
2010-09-16 02:09
社区公告
暂无公告