C语言调用java的方法

发布时间:2020-07-01 11:01:25

来源:亿速云

阅读:86

作者:Leah

本篇文章为大家展示了C语言调用java的方法,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

步骤:

1. 创建虚拟机;

2. 获得class;

3. 实例化对象:获得构造方法(方法名为“”),构造参数,调用方法。

4. 调用方法:又分为获得方法,构造方法,调用方法。

操作方法:

1. 编译:javac Hello.java

2. javap -p -s Hello.class:查看Signature

3. gcc -I/usr/lib/jvm/java-1.8.0-openjdk-amd64/include/ -I/usr/lib/jvm/java-1.8.0-openjdk-amd64/include/linux/ -o caller caller.c -L /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server -ljvm

4. 执行:LD_LIBRARY_PATH=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server ./caller

举例:

(1)call_static_method#include

#include

JNIEnv* create_vm(JavaVM** jvm, JNIEnv** env)

{

JavaVMInitArgs args;

JavaVMOption options[1];

args.version = JNI_VERSION_1_6;

args.nOptions = 1;

options[0].optionString = "-Djava.class.path=./";

args.options = options;

args.ignoreUnrecognized = JNI_FALSE;

return JNI_CreateJavaVM(jvm, (void **)env, &args);

}

int main(int argc, char **argv)

{

JavaVM* jvm;

JNIEnv* env;

jclass cls;

int ret = 0;

jmethodID mid;

/* 1. create java virtual machine */

if(create_vm(&jvm, &env))

{

printf("can not create jvm\n");

return -1;

}

/* 2. get class */

cls = (*env)->FindClass(env, "Hello");

if(cls == NULL)

{

printf("can not find hello class\n");

ret = -1;

goto destory;

}

/* 3. create object */

/* 4. call method

* 4.1 get method

* 4.2 create parameter

* 4.3 call method

*/

mid = (*env)->GetStaticMethodID(env, cls, "main", "([Ljava/lang/String;)V");

if(mid == NULL)

{

ret = -1;

printf("can not get method\n");

goto destory;

}

(*env)->CallStaticVoidMethod(env, cls, mid, NULL);

destory:

(*jvm)->DestroyJavaVM(jvm);

return ret;

}

(2)call_non_static_method#include

#include

JNIEnv* create_vm(JavaVM** jvm, JNIEnv** env)

{

JavaVMInitArgs args;

JavaVMOption options[1];

args.version = JNI_VERSION_1_6;

args.nOptions = 1;

options[0].optionString = "-Djava.class.path=./";

args.options = options;

args.ignoreUnrecognized = JNI_FALSE;

return JNI_CreateJavaVM(jvm, (void **)env, &args);

}

int main(int argc, char **argv)

{

JavaVM* jvm;

JNIEnv* env;

jclass cls;

int ret = 0;

jmethodID mid;

jmethodID cid;

jobject jobj;

jstring jstr;

int r;

/* 1. create java virtual machine */

if(create_vm(&jvm, &env))

{

printf("can not create jvm\n");

return -1;

}

/* 2. get class */

cls = (*env)->FindClass(env, "Hello");

if(cls == NULL)

{

printf("can not find hello class\n");

ret = -1;

goto destory;

}

/* 3. create object

*

*/

cid = (*env)->GetMethodID(env, cls, "", "()V");

if(cid == NULL)

{

printf("can not get construct method\n");

ret = -1;

goto destory;

}

jobj = (*env)->NewObject(env, cls, cid);

if(jobj == NULL)

{

printf("can not create object\n");

ret = -1;

goto destory;

}

/* 4. call method

* 4.1 get method

* 4.2 create parameter

* 4.3 call method

*/

mid = (*env)->GetMethodID(env, cls, "sayhello_to", "(Ljava/lang/String;)I");

if(mid == NULL)

{

ret = -1;

printf("can not get method\n");

goto destory;

}

jstr = (*env)->NewStringUTF(env, "287787472@qq.com");

r = (*env)->CallIntMethod(env, jobj, mid, jstr);

printf("ret = %d\n", r);

destory:

(*jvm)->DestroyJavaVM(jvm);

return ret;

}

上述内容就是C语言调用java的方法,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

c 语言调用java_C语言调用java的方法相关推荐

  1. c语言 python java_C语言、C++、Java,Python之间的区别,哪个更有前景,哪个更难 ?...

    从这四种语言的难度.受欢迎度还有作用以及优点缺点给楼主做一个全面的分析,我们可以从中了解其区别,以及难易程度.至于今后可以用到的或者是前景问题,根据自己的职业发展大家可以自己做个分析.最后会总结一下他 ...

  2. Java学习之路3——方法定义、调用【重拾Java】

    Java学习之路3--方法定义.调用[重拾Java] 方法定义 为什么要写方法 方法完整的定义形式.调用 方法定义的格式 修饰符 返回值类型 返回值 调用格式 方法重载 方法定义 为什么要写方法 对于 ...

  3. JAVA调用R语言之Rserve(二)

    之前,我写了一篇文章是java调用R语言之Rserve,但我发现那种方法比较麻烦.后来我发现了一个比较方便的方法,所以今天从又写了一篇博客,来简单说说. 这次我们需要写一个简单的R语言脚本,然后通过运 ...

  4. JAVA调用R语言之Rserve

    为什么要用java调用R? Java作为一个非常流行的编程语言,具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂 ...

  5. R语言实战应用精讲50篇(十三)-如何使用JAVA调用R语言,两种语言的完美结合

    前言 为什么要用java调用R? Java作为一个非常流行的编程语言,具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进 ...

  6. java调用siri 语言_如何更改Siri的声音,口音,性别和语言

    java调用siri 语言 Most of us are familiar with Siri as an American female voice. What you may not realiz ...

  7. java JNI调用C语言动态链接库(java.lang.UnsatisfiedLinkError: no yourClassName in java.library.path 异常的解决方法)

    转自: http://watershitter.iteye.com/blog/477615 今天花了至少3个小时跑这个java调c的动态链接库的Hello,native world的程序.  把所有犯 ...

  8. JAVA调用C语言程序

    JAVA调用C语言程序 JAVA调用C语言程序 1. 编写带有native声明的方法的Java类 2. 使用javah 生成:jniSample.h的头文件 3. 使用C实现本地sum方法:(这里我生 ...

  9. JAVA中native方法调用C语言实现学习

    在java虚拟机规范的内存管理划分中,对于虚拟机内存空间划分中专门划了一块内存叫做"本地方法栈(Native Method Stack)".本地方法栈是为了java专门用来调用na ...

最新文章

  1. nginx启动只有master没有worker_深入浅出Nginx
  2. sql server2005 通用分页方法
  3. exists sql用法_彻底弄懂sql select各种查询用法
  4. Spring定时任务@scheduled多线程的使用(@Async注解)
  5. 【数据结构和算法笔记】AOE网和关键路径
  6. [R语言绘图]条状图barplot
  7. js打印线程id_理解Python多线程:通过易懂的小例子展开第一篇
  8. SEO知识:百度谷歌搜狗谷歌必应搜索引擎蜘蛛的特点
  9. tensorflow打印模型图_tensorflow 实现打印pb模型的所有节点
  10. 关于stable diffusion的embedding训练的一篇随笔
  11. android飞机大战功能,安卓飞机大战(二) SurfaceView实现自制背景
  12. ArcGIS 网络分析[2.3] 最近设施点
  13. 2018今日头条校招大数据方向第三批编程题2
  14. 消息队列常见的几种使用场景介绍!
  15. Flutter开发 - 对于富文本展示的方法封装
  16. 刀片服务器可以接无线网卡吗,购买一台刀片服务器其硬件成本需不需要关注?...
  17. 课程设计:学生成绩管理系统
  18. php工程师 英文,开发工程师的英文怎么说
  19. 软件测试工程师求职踩过的坑——实战经验的分享啊
  20. 2012年1月,拥有131年历史的柯达申请破产

热门文章

  1. BNF范式(巴科斯范式)
  2. 68个Spring框架面试题,含答案
  3. 请用c++写一个视频为转换成GIF的代码
  4. IIS应用程序池启用32位导致服务不可用的503错误
  5. 《区块链基础知识25讲》学习笔记——第一部分区块链术语与技术基础
  6. 说说im2bw这个函数对uint8和double的反应
  7. 【WINDOWS / DOS 批处理】call命令详解
  8. 满足正常需求:Ubuntu下安装微信、QQ等
  9. 用Modelsim SE 直接仿真 Altera(Intel PSG) IP核 需要注意的问题
  10. 短视频美食自媒体怎么做?5步教你快速上手