近段时间做电脑的PC电源管理!开发语言是java但是偏偏java对底层的硬件控制不是很好!无奈软件的很多东西都是java写的(尤其是界面),所以想到了java的本地调用功能!利用C++或者C语言完成底层然后封装成DLL文件给java调用!
在做这之前在网上也搜索了一些例子!无奈很多给的很不完整有些重要步骤没有介绍所以在此给出完整的步骤!
第一步:新建一个java类:在此命名为TestNative.java
public class TestNative { public native void SayHello(); public static void main(String[] args) { // TODO Auto-generated method stub } }
然后就是利用jdk bin目录里面的javah 所在目录如下:
启动运行
(运行启动就不用太详细了把!)
输入cmd命令进入命令指示符界面,然后就是进入java类所在目录,我放在E盘所以就进入了E盘,
先编译生成class文件然后启动javah命令,生出TestNative.h头文件。截图如下:
怎么样生成了如下文件
接下来启动vc++或者Visual studio。
新建DLL工程
好把我把工程名设置TestNative1
然后工程目录就建好了。
把之前生成的TestNative文件放到工程目录下,然后将其添加到头文件里面。
在添加的时候出现了问题,原因是visio和vc的不兼容,具体解决方案见我的另外一个日志里面有详细介绍。
然后新建一个c++source文件添加到sourcefile文件中去!
在新建的文件里面添加如下代码:
#include"TestNative.h"
#include<iostream>
using namespace std;
JNIEXPORT void JNICALL Java_TestNative_SayHello (JNIEnv * env, jobject obj)
{
cout<<"hello World!"<<endl;
}
截图如下:
然后将jdk目录include下的jni.h和子目录下的jni_md.h文件复制到项目目录下并且添加到头文件(HeadFile)里面。切记:一定要添加不然会报错,还有就是头文件的TestNative.h文件需要修改 <>需要修改成””否则回到系统目录下寻找。
截图如下:
此时编译成功在debug目录下生成TestNative1.dll文件
接着我们设置相应的dll路径你可以选择设置环境变量,讲dll文件的目录添加到环境变量path目录里面或者
干脆直接复制到jdk jre目录里面的bin和lib目录下面!
和
然后就是编写java程序添加如下代码:
然后就是重新编译运行生成结果!
怎么样很棒把!
jni缺点一旦使用了jni java就不能跨平台了,环境改变就需要做出相应的改变才行!