求助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
求教!!!!
...全文
359 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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"
alidion 2010-09-16
  • 打赏
  • 举报
回复
帮你顶....
dinjay 2010-09-16
  • 打赏
  • 举报
回复
自己顶....

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧