求一个jni层调用.java里某个方法的例子

西热力江 2013-03-01 08:26:33
哪位给个地址 或者简单的写个示例!!不胜感激!
...全文
180 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
西热力江 2013-03-04
  • 打赏
  • 举报
回复
引用 2 楼 hjtzdyh 的回复:
C/C++ code?1234567891011121314151617181920212223242526272829303132static int invokeJava(char *args){ jclass notifyJavaCls; jmethodID notifyJavaMethod; JNIEnv *notifyJavaEnv; ……
请教下invokeJava() 函数是我在想调用的地方调用?? getVxworksEventArg 这个是java层的方法吗?? 是不是还要再创建一个线程啊???
hjtzdyh 2013-03-04
  • 打赏
  • 举报
回复
引用 4 楼 gq414047080 的回复:
引用 2 楼 hjtzdyh 的回复: C/C++ code?1234567891011121314151617181920212223242526272829303132static int invokeJava(char *args){ jclass notifyJavaCls; jmethodID notifyJavaMethod; JNIEnv *notifyJavaE……
getVxworksEventArg 这个是java中的方法. 如果你不需要我这样java->c ->java的回调,是不需要attach线程的. 而且,我这个代码,没有释放某些资源.
hjtzdyh 2013-03-04
  • 打赏
  • 举报
回复
你参考2楼给的那个例子呗. 我这个是先在java中调用C, 同时C中接受到其他的异步通知,再回调java的方法. 因此才attach的.
  • 打赏
  • 举报
回复
JNI实践+读取CPUID,HDID,HDNAME,NETMAC http://www.blogjava.net/vanlin/archive/2009/10/13/298105.html
hjtzdyh 2013-03-01
  • 打赏
  • 举报
回复

static int invokeJava(char *args)
{
	jclass notifyJavaCls;
	jmethodID notifyJavaMethod;
	JNIEnv *notifyJavaEnv;

    jint status = jvm->AttachCurrentThread((void **)¬ifyJavaEnv, NULL);
	if(status < 0 ){
		cout<<"AttachCurrentThread failed"<<endl;
		return -1;
	}

	notifyJavaCls = notifyJavaEnv->GetObjectClass(notifyJavaObj);
	if(notifyJavaCls == NULL){
		cout<<"GetObjectClass failed"<<endl;
		return -1;
	}

	notifyJavaMethod = notifyJavaEnv->GetMethodID(notifyJavaCls, "getVxworksEventArg", "(Ljava/lang/String;)I");
	if(notifyJavaMethod == 0){
		cout<<"GetMethodID failed"<<endl;
		return -1;
	}

    jstring eventArgs = WindowsTojstring(notifyJavaEnv, args);

    notifyJavaEnv->CallIntMethod(notifyJavaObj, notifyJavaMethod, eventArgs);

    jvm->DetachCurrentThread();

    return 0;
}
wangjinlong3768038 2013-03-01
  • 打赏
  • 举报
回复
用JNA吧亲,为什么还用JNI?JNA比JNI简单多了

58,454

社区成员

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

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