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. 【linux】可执行程序执行时报错-sh: ./mxc_v4l2_tvin.out: No such file or directory的解决方法
  2. 一级域名和二级域名的区别是什么?作用怎样?
  3. 如何在Eclipse中使用tomcat9 运行servlet开发简单的动态网页?
  4. RMAN深入解析之--控制文件
  5. 阿里巴巴研究员叔同:云原生是企业数字创新的最短路径
  6. wp如何代码实现锁屏
  7. 【PAT甲级 BigInteger】1019 General Palindromic Number (20 分) Java版 7/7通过
  8. mysql与jframe_java-如何在JFrame上显示从mysql检索到的图像
  9. 网络通道数2的倍数_限流笔记-通道限流(二)
  10. java 图像梯度检测_数字图像处理-边缘检测
  11. SQL 审核系统体验
  12. java质因数算法_Java实现的质因数分解操作示例【基于递归算法】
  13. 12.1、自定义Condition
  14. Uber宣布停止无人卡车项目,研发重心将转向无人小汽车
  15. 思科网络设备模拟器GNS3与SecureCRT关联
  16. Mina(1):快速上手
  17. oracle查询语句大全 oracle 基本命令大全
  18. 微信中那些你不知道的隐藏实用功能!
  19. 自我规定int string char[]
  20. 关于数据库可变长字符串类型长度设计问题:慷慨是不明智的

热门文章

  1. 解析常见的数据分析模型——行为事件分析
  2. bilstm命名实体识别任务
  3. Access 错了,还是我傻了
  4. Linux debian安装Vim和Vim使用教程
  5. 2022 长安“战疫”网络安全卫士守护赛 WriteUp
  6. 使用python通过http发送json
  7. idea将javaweb项目打包成war
  8. 用Modelsim SE 直接仿真 Altera(Intel PSG) IP核 需要注意的问题
  9. nginx配置禁特定路径下的反向代理
  10. C# JArray 转前台JS json数组