首页 / JAVA / 如何从jni端调用Java方法?
如何从jni端调用Java方法?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何从jni端调用Java方法?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1664字,纯文字阅读大概需要3分钟。
内容图文
我已经在jni方面完成了一些C代码功能,并且一切正常.
public native String getMessage()
函数将字符串从jni端返回到java端,并且可以正常工作,所有其他jni代码也可以正常工作.但是一个问题是如何在不使用return的jni函数中返回字符串,所以
public native void getMessagewithoutReturn()
应该能够返回字符串.然后,我使用getMessagewithoutReturn()函数永无休止地使用pthread循环,如下所示:(有效)
pthread_t native_thread;
pthread_create(&native_thread, NULL, native_thread_start_reading, env);
而且每次循环迭代时我都必须能够返回字符串,所以我不能使用return,因为它会停止函数运行.
pthread_t native_thread;
pthread_create(&native_thread, NULL, native_thread_start_reading, env);sted out that
我已经测试过posix线程,并且在android方面都可以正常工作,因为它不是启动工作线程,但是现在只是在每次迭代中获取字符串而不使用函数返回的问题.
解决方法:
我的建议 :
创建一个将接收字符串的类(您也可以使用接口或抽象类):
class ResultHandler {
public void onReturnedString(String str)
{
/* Do something with the string */
}
}
然后更改您的函数的原型:
public native void getMessagewithoutReturn(ResultHandler handler);
并且本机函数将变为:
void Java_com_foo_bar_getMessagewithoutReturn(JNIEnv *env, jobject thiz, jobject handler);
现在,您必须调用处理程序的onReturnedString,因此必须使用JNI函数:
jmethodID mid;
jclass handlerClass = (*env)->FindClass(env, "com/foo/bar/ResultHandler");
if (handlerClass == NULL) {
/* error handling */
}
mid = (*env)->GetMethodID(env, handlerClass, "onReturnedString", "(Ljava/lang/String;)V");
if (mid == NULL) {
/* error handling */
}
然后,当您需要调用该函数时:(我想resultString是一个jstring)
(*env)->CallVoidMethod(env, handler, mid, resultString);
我没有测试代码,但是您有基本的想法.
一些参考和示例代码here
内容总结
以上是互联网集市为您收集整理的如何从jni端调用Java方法?全部内容,希望文章能够帮你解决如何从jni端调用Java方法?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。