c 语言调用java_C语言调用java的方法
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的方法相关推荐
- c语言 python java_C语言、C++、Java,Python之间的区别,哪个更有前景,哪个更难 ?...
从这四种语言的难度.受欢迎度还有作用以及优点缺点给楼主做一个全面的分析,我们可以从中了解其区别,以及难易程度.至于今后可以用到的或者是前景问题,根据自己的职业发展大家可以自己做个分析.最后会总结一下他 ...
- Java学习之路3——方法定义、调用【重拾Java】
Java学习之路3--方法定义.调用[重拾Java] 方法定义 为什么要写方法 方法完整的定义形式.调用 方法定义的格式 修饰符 返回值类型 返回值 调用格式 方法重载 方法定义 为什么要写方法 对于 ...
- JAVA调用R语言之Rserve(二)
之前,我写了一篇文章是java调用R语言之Rserve,但我发现那种方法比较麻烦.后来我发现了一个比较方便的方法,所以今天从又写了一篇博客,来简单说说. 这次我们需要写一个简单的R语言脚本,然后通过运 ...
- JAVA调用R语言之Rserve
为什么要用java调用R? Java作为一个非常流行的编程语言,具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂 ...
- R语言实战应用精讲50篇(十三)-如何使用JAVA调用R语言,两种语言的完美结合
前言 为什么要用java调用R? Java作为一个非常流行的编程语言,具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进 ...
- java调用siri 语言_如何更改Siri的声音,口音,性别和语言
java调用siri 语言 Most of us are familiar with Siri as an American female voice. What you may not realiz ...
- java JNI调用C语言动态链接库(java.lang.UnsatisfiedLinkError: no yourClassName in java.library.path 异常的解决方法)
转自: http://watershitter.iteye.com/blog/477615 今天花了至少3个小时跑这个java调c的动态链接库的Hello,native world的程序. 把所有犯 ...
- JAVA调用C语言程序
JAVA调用C语言程序 JAVA调用C语言程序 1. 编写带有native声明的方法的Java类 2. 使用javah 生成:jniSample.h的头文件 3. 使用C实现本地sum方法:(这里我生 ...
- JAVA中native方法调用C语言实现学习
在java虚拟机规范的内存管理划分中,对于虚拟机内存空间划分中专门划了一块内存叫做"本地方法栈(Native Method Stack)".本地方法栈是为了java专门用来调用na ...
最新文章
- nginx启动只有master没有worker_深入浅出Nginx
- sql server2005 通用分页方法
- exists sql用法_彻底弄懂sql select各种查询用法
- Spring定时任务@scheduled多线程的使用(@Async注解)
- 【数据结构和算法笔记】AOE网和关键路径
- [R语言绘图]条状图barplot
- js打印线程id_理解Python多线程:通过易懂的小例子展开第一篇
- SEO知识:百度谷歌搜狗谷歌必应搜索引擎蜘蛛的特点
- tensorflow打印模型图_tensorflow 实现打印pb模型的所有节点
- 关于stable diffusion的embedding训练的一篇随笔
- android飞机大战功能,安卓飞机大战(二) SurfaceView实现自制背景
- ArcGIS 网络分析[2.3] 最近设施点
- 2018今日头条校招大数据方向第三批编程题2
- 消息队列常见的几种使用场景介绍!
- Flutter开发 - 对于富文本展示的方法封装
- 刀片服务器可以接无线网卡吗,购买一台刀片服务器其硬件成本需不需要关注?...
- 课程设计:学生成绩管理系统
- php工程师 英文,开发工程师的英文怎么说
- 软件测试工程师求职踩过的坑——实战经验的分享啊
- 2012年1月,拥有131年历史的柯达申请破产