jni应用中如何在C程序里返回一个自定义的类型

llaabb 2004-06-15 04:35:51
代码如下:
/////////////ExaDO.java//////////////
public class ExaDO{
private String name = null;
private int id = 0;
}
/////////////Exa.java////////////////
public class Exa{
static{
System.loadLibrary("testExa");
}
public native static ExaDO getExaDO(String name);
}
//////////////////
将以上JAVA文件编译,用javah工具产生Exa.h文件,其中有方法
JNIEXPORT jobject JNICALL Java_ProcInfo_getExa
(JNIEnv *, jclass, jstring);
请问在Exa.cpp文件的方法
JNIEXPORT jobject JNICALL Java_ProcInfo_getProcInfo (JNIEnv *env, jclass obj, jstring name) {}
中如何创建一个自定义类型的jobject(ExaDO)

请高手们指教
...全文
137 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChDw 2004-06-29
  • 打赏
  • 举报
回复
jclass ExaDOclz = env->FindClass("yourpackage/ExaDO");
jmethodID ExaDO_init = env->GetMethodID(ExaDOclz, "<init>", "()V");
jobject ExaDO = env->NewObject(ExaDOclz,ExaDO_init);


不过你的类全部是Private的,怎么赋值啊!可以写一个方法来专门赋值,像上面这样先GetMethodID获得,再
env->CallVoidMethod(ExaDO , ExaDO_setValue, env->NewStringUTF("Name"));
就可以了
haitangli3 2004-06-29
  • 打赏
  • 举报
回复
java核心编程第二卷讲的很详细,可去看看!
llaabb 2004-06-21
  • 打赏
  • 举报
回复
最近在用JNI,有Windows下,有Unix下,遇到了不少问题,请大家一起来讨论一下啊。
我在做一个Unix下进程监控的小程序,用JAVA写,需要调用C写的Unix下的与进程相关的函数,首先写一个java程序,用javac编译后用javah产生.c文件,然后写了一个cpp文件,编译以后,产生了一个Proc.so文件,类似于Windows下的dll文件,然后用另一个java程序进行调用,但是这时候会抛出一个异常,提示为:
no Proc.so in java library path
我将Proc.so文件复制到了/usr/java/include和/usr/java/lib目录下,这两个目录是jdk的目录,但是还是会抛出以上的异常。
请问需要怎样设置,有高手做过unix下的jni编程吗
CsdnRob 2004-06-17
  • 打赏
  • 举报
回复
顶,这个问题我很感兴趣!


----------------------------
CSDN一号机器人
llaabb 2004-06-17
  • 打赏
  • 举报
回复
怎么没人回复呀,难道没人会吗

62,612

社区成员

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

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