快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

C/C++怎么调用Java不同类中的静态方法

本篇内容主要讲解“ C/C++怎么调用Java不同类中的静态方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ C/C++怎么调用Java不同类中的静态方法”吧!

十余年的衡水网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整衡水建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“衡水网站设计”,“衡水网站推广”以来,每个客户项目都认真落实执行。

前言

上一篇我们介绍了《Android NDK编程(四)--- C/C++调用Java中的方法》,主要是C/C++中调用Java的方法,这一篇我们针对上一篇的内容再延伸说一下,关于调不同类中的静态方法。

代码演示  

我们继续接着原来的Demo程序进行处理,首先我们先新建一个类名为VaccaeJNI,然后在这个类里面增加一个native的静态方法。

C/C++怎么调用Java不同类中的静态方法

通过ALT+ENTER在native-lib.cpp中增加了对应的方法函数,然后写实现方法。

C/C++怎么调用Java不同类中的静态方法

最后再我们的按钮事件里调用VaccaeJNI类中的静态方法

C/C++怎么调用Java不同类中的静态方法

运行结果

C/C++怎么调用Java不同类中的静态方法

上面来说我们从java调C/C++的方法其实基本都差不多,下面我们重点要说一下C/C++调用java的方法。

我们在VaccaeJNI中加入一个native的静态方法和一个本地的静态方法。

C/C++怎么调用Java不同类中的静态方法

然后再对应的C++文件中写入实现方法

从上图我们可以看到,调用静态方法的时候我们的GetMethodID和CallMethod方法都加上了static变为GetStaticMethodIDCallStaticIntMethod,如果这里不改变的话,调用时就会报错了。

在按钮事件中我们再写实现方法

C/C++怎么调用Java不同类中的静态方法

相对来说调用静态方法还是比较简单的,我们看一下运行结果

C/C++怎么调用Java不同类中的静态方法


调用不同类中的方法

最后我们要说一下重点,因为我们在写方法的时候可能会调用的是不同类里面的方法,导航native的方法和要调用的java方法不在同一个类里,遇到这样的方法我们来看一看怎么实现。

我们还是在VaccaeJNI的类中写一个非静态的方法,两个数相乘

C/C++怎么调用Java不同类中的静态方法

然后调用的native的函数,我们直接写在Mainactivity.java中

C/C++怎么调用Java不同类中的静态方法

上图中我们先定义了一个plusFromJNI的参数,输入两个值得到返回数,然后先把按钮事件写了调用方法,接下来我们按ALT+ENTER在C++的文件中生成方法

native-lib.cpp

extern "C"JNIEXPORT jint JNICALLJava_dem_vac_vaccaendk_MainActivity_plusFromJNI(JNIEnv *env, jobject instance, jint a, jint b) {
   //首先获取class,这里传入的参数jobject是代表了Mainactivity,所以我们要自己查找    jclass jcls=env->FindClass("dem/vac/vaccaendk/VaccaeJNI");    if (jcls == NULL) {        return 0;    }
   //获取方法    jmethodID jmethod = env->GetMethodID(jcls, "Plus", "(II)I");    if(jmethod==NULL) {        return 0;    }
   //调用访法    //第一个参数为jobject的这是传入的是jobject是Mainactivity,    //如果在CallIntMethod里面直接用传入的肯定会出错,因为我们的    //方法是在VaccaeJNI的类里面,所以我们首先要实例化那个类,再调用    jobject jobj = env->AllocObject(jcls);    return env->CallIntMethod(jobj,jmethod,a,b);

}

上面代码中我们主要要关注几个我写了注释的地方,如下图

C/C++怎么调用Java不同类中的静态方法

最后我们再运行一下程序,看看结果

C/C++怎么调用Java不同类中的静态方法

到此,相信大家对“ C/C++怎么调用Java不同类中的静态方法”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


新闻标题:C/C++怎么调用Java不同类中的静态方法
转载注明:http://6mz.cn/article/psggce.html

其他资讯