想在本地代码中用输出参数传一个自定义的类数组,遇到了一些问题,请教一下各位高手,多谢
C++中的代码是这样的:
JNIEXPORT jint JNICALL Java_GetIEJni_getMapIes___3B_MapIe_2
(JNIEnv *jEnv, jobject jobj, jbyteArray msg, jobjectArray jobjIe)
{
int j=0;
for(int i=0;i<G_IE_BUF_SIZE;i++)
{
if(g_ie_buf[i].ie != ZERO)
{
printf("\nThe result are: %d,%d",g_ie_buf[i].ie,j);
jobject jIe = jEnv->GetObjectArrayElement(jobjIe,j);
printf("\naaaaaa");
jclass jClass = jEnv->GetObjectClass(jIe);
printf("\nbbbbbb");
jfieldID fie = jEnv->GetStaticFieldID(jClass,"ie","S");
printf("\ncccccc");
jEnv->SetStaticShortField(jClass,fie,g_ie_buf[i].ie);
printf("\ndddddd");
jfieldID flen = jEnv->GetStaticFieldID(jClass,"len","B");
printf("\neeeeee");
jEnv->SetStaticByteField(jClass,flen,g_ie_buf[i].elength);
printf("\naaabbb");
jEnv->SetObjectArrayElement(jobjIe,j,jClass);
printf("\ncccaaa");
printf("\nffffffff");
j++;
}
}
printf("\nThe Array is finished");
free(g_ie_buf);
return 1;
}
在java中运行,结果如下:
The result are: 63,0
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
aaabbb
cccaaa
ffffffff
The result are: 81,1
aaaaaa
bbbbbb
cccccc很明显,进入第二次循环的时候,设置数组jobjIe中的元素时,就出错了,
当我把jEnv->SetObjectArrayElement(jobjIe,j,jClass);屏蔽掉时,程序不会出错,但是输出参数jobjIe中所有元素都是一样的,也就是只取了g_ie_buf中的最后一个值。
请问哪位有这方面的经验?还望不吝赐教,谢谢!
C++中的代码是这样的:
JNIEXPORT jint JNICALL Java_GetIEJni_getMapIes___3B_MapIe_2
(JNIEnv *jEnv, jobject jobj, jbyteArray msg, jobjectArray jobjIe)
{
int j=0;
for(int i=0;i<G_IE_BUF_SIZE;i++)
{
if(g_ie_buf[i].ie != ZERO)
{
printf("\nThe result are: %d,%d",g_ie_buf[i].ie,j);
jobject jIe = jEnv->GetObjectArrayElement(jobjIe,j);
printf("\naaaaaa");
jclass jClass = jEnv->GetObjectClass(jIe);
printf("\nbbbbbb");
jfieldID fie = jEnv->GetStaticFieldID(jClass,"ie","S");
printf("\ncccccc");
jEnv->SetStaticShortField(jClass,fie,g_ie_buf[i].ie);
printf("\ndddddd");
jfieldID flen = jEnv->GetStaticFieldID(jClass,"len","B");
printf("\neeeeee");
jEnv->SetStaticByteField(jClass,flen,g_ie_buf[i].elength);
printf("\naaabbb");
jEnv->SetObjectArrayElement(jobjIe,j,jClass);
printf("\ncccaaa");
printf("\nffffffff");
j++;
}
}
printf("\nThe Array is finished");
free(g_ie_buf);
return 1;
}
在java中运行,结果如下:
The result are: 63,0
aaaaaa
bbbbbb
cccccc
dddddd
eeeeee
aaabbb
cccaaa
ffffffff
The result are: 81,1
aaaaaa
bbbbbb
cccccc很明显,进入第二次循环的时候,设置数组jobjIe中的元素时,就出错了,
当我把jEnv->SetObjectArrayElement(jobjIe,j,jClass);屏蔽掉时,程序不会出错,但是输出参数jobjIe中所有元素都是一样的,也就是只取了g_ie_buf中的最后一个值。
请问哪位有这方面的经验?还望不吝赐教,谢谢!
解决方案 »
- 怎样给JMenuItem设置事件,使之点击生成对话框提示
- jar 文件不能打开?
- 如何通过JAVA编程实现检测某个进程是否正在运行?
- 急+怪:定义了两个单独List类全局变量,操作一个List,另外一个List的值也跟着发生变化
- 这种要求怎么实现? 是不是有什么模式?
- 运行java
- 欢迎大家加入我的群"华南软件技术基地",群QQ为8373474,一起提高啊
- 如何使用正则表达。
- 我要做一个在线编辑器,可以实现插入图片、使图片居中、在图片上可加链接,我该怎么做啊?各位给点思路,怎么把编辑器的所有内容保存在数
- 请教大虾,为什么我linux7.2下的tomcat起不来,及如何才能与apache整合?
- java程序中配置文件的加载
- 用BufferedInputStream读入后,想输入到string。。
(JNIEnv *jEnv, jobject jobj, jbyteArray msg, jobject jteamMebs)
{
jclass jVect = jEnv->GetObjectClass( jobjIe );
...
jobject jb = jEnv->AllocObject( jcs ); jfieldID fd1 = jEnv->GetFieldID( jcs, "name", "Ljava/lang/String;" );
jfieldID fd2 = jEnv->GetFieldID( jcs, "age", "I" ); jEnv->SetObjectField( jb, fd1, jEnv->NewStringUTF(p->name.c_str()) );
jEnv->SetIntField( jb, fd2, p->age ); jmethodID va = jEnv->GetMethodID( jVect, "addElement", "(Ljava/lang/Object;)V" );
jEnv->CallVoidMethod( jteamMebs, va, jb );
......
}