使用JNI时遇到的一个关于GetFieldID问题

kofot2002 2010-09-15 02:55:00
我在做一个JNI,是把一个Java对象传递给C,我只是想在C中获取这个对象的其中一个String属性,然后printf出来,但发现GetFieldID()这不行了,代码如下:

Java 传递的对象的类是:
public class Wobj {
String myName;
int age;
//......get()..set()...
}

调用本地接口的类如下:
public class NativeRWtxt {
public void loadLibrary(String libStr){
System.loadLibrary(libStr);
//this.displayHello();
}
public void loadDll(String dllstr){
System.load(dllstr);//必须带绝对路径和后缀名
}
public native void Write2txt(Wobj wobj);//就是传递一个Wobj对象
}

通过javah生成h头文件,测试的java代码如下:
NativeRWtxt nr=new NativeRWtxt();
Wobj wobj=new Wobj();
wobj.setMyName("Chris");
wobj.setAge(99);
//省略加载dll的代码...
nr.Write2txt(wobj);

//完毕...

下面是C的代码:
JNIEXPORT void JNICALL Java_lq_jni_NativeRWtxt_Write2txt(JNIEnv *env, jobject obj, jobject wobj)
{
jclass wbj=(*env)->GetObjectClass(env,wobj);
if(wbj==NULL)
{
printf("Wobj is null!\n");
return;
}
jfieldID fid=(*env)->GetFieldID(env,wbj,"ss","I");
jint i=(*env)->GetIntField(env,wbj,fid);
//jfieldID fid=(*env)->GetFieldID(env,enty,"age","I");
if(fid==NULL)
{
printf("Failed to get fieldID!\n");
return;
}
fid=(*env)->GetFieldID(env,wbj,"myName","Ljava/lang/String");//问题就在这里
if(fid==NULL)
{
printf("Failed to get myName's value!");
return;
}
printf("wobj's age is:%d.\n",(int)i);
return;
}
编译好dll文件后,放入相应的class文件目录内,运行就报错,如下:
Exception in thread "main" java.lang.NoSuchFieldError: myName
at lq.jni.NativeRWtxt.Write2txt(Native Method)
at lq.jni.Debug.main(Debug.java:51)
Failed to get myName's value!
如果我注释掉GetFieldID(..."myName"...)那行,是可以往下执行的,而且age也能遭到,但得到的值也不是99,而是一串Long行数值......
这个问题一直困扰我啊,我不知道自己什么地方写错了还是怎么的,就是无法获取到Wobj对象里的String类型.希望大家给我指点一下,谢谢!
...全文
2002 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
abc130314 2010-09-16
  • 打赏
  • 举报
回复
你试下"Ljava/lang/String;"
kofot2002 2010-09-16
  • 打赏
  • 举报
回复
没人遇到过吗?
kofot2002 2010-09-16
  • 打赏
  • 举报
回复
没错,楼上的答对我,我丢死人了,漏了个";"号,唉~~~

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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