网易首页 > 网易号 > 正文 申请入驻

Java调用C语言的方法

0
分享至

Java Native Interface(JNI)是Java语言的本地编程接口,是J2SDK的一部分。在java程序中,我们可以通过JNI实现一些用java语言不便实现的功能。动力节点小编告诉大家通常有以下几种情况我们需要使用JNI来实现。

标准的Java类库没有提供你的应用程序所需要的功能,通常这些功能是平台相关的

你希望使用一些已经有的类库或者应用程序,而他们并非用java语言编写的

程序的某些部分对速度要求比较苛刻,你选择用汇编或者c语言来实现并在java语言中调用他们

下面我们开始编写HelloWorld程序,由于涉及到要编写c/c++代码因此我们会在开发中使用Microsoft VC++工具。编写java代码,我们在硬盘上建立一个hello目录作为我们的工作目录,首先我们需要编写自己的java代码,在java代码中我们会声明native方法,代码非常简单。如下所示

class HelloWorld { public native void displayHelloWorld(); static { System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().displayHelloWorld(); } }

注意我们的displayHelloWorld()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("hello")这句代码,它是在静态初始化块中定义的,系统用来装载hello共享库,这就是我们在后面生成的hello.dll(如果在其他的操作系统可能是其他的形式,比如hello.so) 编译java代码 javac HelloWorld.java 生成HelloWorld.class文件创建.h文件 这一步中我们要使用javah命令生成.h文件,这个文件要在后面的c/c++代码中用到,我们运行 javah HelloWorld。这样我们可以看到在相同目录下生成了一个HelloWorld.h文件,文件内容如下 在此我们不对他进行太多的解释。

/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class HelloWorld */ #ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: HelloWorld * Method: displayHelloWorld * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif

编写本地实现代码 在这部分我们要用C/C++语言实现java中定义的方法,我们在VC++中新建一个Project,然后创建一个HelloWorldImp.cpp文件,内容如下

#include #include "HelloWorld.h" #include JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj) { printf("Hello world!\n"); return; }

注意我们这里include了 jni.h和刚才得到的HelloWorld.h文件。因此你要在VC++里面设置好,jni.h在JAVA_HOME/include里面。编译通过后再生成hello.dll文件。 运行java程序 把上面生成的hello.dll文件复制到我们的工作目录,这时候我们的目录中包括HelloWorld.java,HelloWorld.class和hello.dll文件。运行java HelloWorld命令,则可在控制台看到Hello world| 的输出了。

运行VC++; 文件---新建---选“win32 console application”(控制台程序)---在右方设置好路径并输入工程名---确定 接下来的几个提示框点确定就行了,那是提示是否要用VC++提供的框架之类的 在左边的工作空间中选“FILEVIEW”标签项,点开“+”号,右键点击“SOURCE FILES”,选“添加文件到目录”,此即添加你要建立的C++源程序文件,会提示你没有文件,是否添加,你点是,输入文件名保存就OK了 然后SOURCE FILES下就出现了你刚才建立的*.CPP文件,双击,输入代码. 以下就是点”组建”菜单中的”编译”、”组建”等命令进行调试了。

动力节点Java培训:http://www.bjpowernode.com/

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
看浙江宣传谈“基本盘”的重要性

看浙江宣传谈“基本盘”的重要性

林中木白
2026-05-13 13:33:25
一季度失业保险基金支出536.6亿元,同比增长15.4%

一季度失业保险基金支出536.6亿元,同比增长15.4%

爆角追踪
2026-05-13 10:25:49
美国总统访华,路费食宿谁掏钱?

美国总统访华,路费食宿谁掏钱?

黄娜老师
2026-05-13 20:31:40
NBA球队老板手撕华裔女猎手:100亿的仙人跳 搞砸了

NBA球队老板手撕华裔女猎手:100亿的仙人跳 搞砸了

慕容律师
2026-05-13 14:15:09
特朗普专机落地!抵达北京开启访华行程

特朗普专机落地!抵达北京开启访华行程

看看新闻Knews
2026-05-13 20:44:02
8年前击败北大硕士,拿下诗词大会冠军的外卖大叔,如今过得怎样

8年前击败北大硕士,拿下诗词大会冠军的外卖大叔,如今过得怎样

从零到一研究所
2026-05-09 16:17:39
深度|中东战火烧痛印度,六天访五国,紧急加上阿联酋,莫迪要外交“救国”?

深度|中东战火烧痛印度,六天访五国,紧急加上阿联酋,莫迪要外交“救国”?

上观新闻
2026-05-13 21:18:21
“莫奈紫”变“摸奶子”,OPPO呼吸都是错的

“莫奈紫”变“摸奶子”,OPPO呼吸都是错的

梳子姐
2026-05-13 19:46:10
为什么去过朝鲜回来就沉默的人,不是隐瞒,是真的说不出

为什么去过朝鲜回来就沉默的人,不是隐瞒,是真的说不出

老特有话说
2026-05-12 15:41:08
豪门狂欢夜:国米2-0加冕双冠 巴黎法甲五连冠 曼城3-0施压阿森纳

豪门狂欢夜:国米2-0加冕双冠 巴黎法甲五连冠 曼城3-0施压阿森纳

狍子歪解体坛
2026-05-14 05:17:47
“摸奶子”惹争议!OPPO的流量反噬来了?莫奈:我背锅?!

“摸奶子”惹争议!OPPO的流量反噬来了?莫奈:我背锅?!

品牌新
2026-05-13 17:03:19
网传华工男生在教室偷拍女生?校方:情况属实,依规给予处分

网传华工男生在教室偷拍女生?校方:情况属实,依规给予处分

南方都市报
2026-05-13 17:36:31
“降噪耳机受害者出现”,冲上热搜

“降噪耳机受害者出现”,冲上热搜

观察者网
2026-05-13 09:31:15
最后时刻,黄仁勋挤上飞向北京的“空军一号”

最后时刻,黄仁勋挤上飞向北京的“空军一号”

中国新闻周刊
2026-05-13 20:56:03
重磅!皇马与穆帅敲定3年执教合同!只待本菲卡赛季结束后,官宣

重磅!皇马与穆帅敲定3年执教合同!只待本菲卡赛季结束后,官宣

福酱的小时光
2026-05-14 06:27:54
陈丽华去世1个月,73岁迟重瑞现状曝光,他果然不是“软柿子”

陈丽华去世1个月,73岁迟重瑞现状曝光,他果然不是“软柿子”

揽星河的笔记
2026-05-13 17:03:14
女子吃霸王餐给差评:正脸曝光,自认为没错,要上媒体跟老板对质

女子吃霸王餐给差评:正脸曝光,自认为没错,要上媒体跟老板对质

阅微札记
2026-05-13 14:31:03
关心:黄仁勋为什么能“压哨登机”

关心:黄仁勋为什么能“压哨登机”

观察者网
2026-05-13 16:22:20
山东首富换人,28亿变1万亿,75岁老人干出全球光模块龙头

山东首富换人,28亿变1万亿,75岁老人干出全球光模块龙头

毒sir财经
2026-05-13 21:35:57
民营:不能永远带着原罪的镣铐前行

民营:不能永远带着原罪的镣铐前行

生命可以承受之轻
2026-05-12 08:50:45
2026-05-14 08:07:00
动力节点Java培训
动力节点Java培训
动力节点专注Java培训事业
1367文章数 36关注度
往期回顾 全部

科技要闻

阿里年营收首破万亿,AI终于不再是画大饼

头条要闻

中东战火烧痛印度 莫迪六天访五国要外交“救国”

头条要闻

中东战火烧痛印度 莫迪六天访五国要外交“救国”

体育要闻

14年半,74万,何冰娇没选那条更安稳的路

娱乐要闻

白鹿掉20万粉,网友为李晨鸣不平

财经要闻

美国总统特朗普抵达北京

汽车要闻

C级纯电轿跑 吉利银河"TT"申报图来了

态度原创

本地
亲子
时尚
公开课
军事航空

本地新闻

用苏绣的方式,打开江西婺源

亲子要闻

重庆儿童配眼镜,家长指南:儿童防控五大核心问题汇总

专栏 | 进入心流后,不被洪流裹挟

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

美以伊战争期间以总理密访阿联酋

无障碍浏览 进入关怀版