使用 Jni 调用 Dll 的实现JAVA在cmd控制台刷屏
2015-10-24 21:21
991 查看
代码与实际图片有一定出入
有问题请留言
第一步:编写Java端代码
定义一个Java类Cls
编译之后在.class所在的pacmanDemo目录下执行javah pacmanDemo.Cls命令生成头文件pacmanDemo_Cls.h
若没有包,则直接javah Cls
![](https://img-blog.csdn.net/20151024212822502?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
第二步:生成DLL库
1. 打开VS,创建一个名称为ClsCpp的C++ Win32项目。在向导的应用程序类型处选择DLL,点完成。
![](https://img-blog.csdn.net/20151024212929806?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
设置Release+Win32编译配置。根据需要选择32位还是64位
![](https://img-blog.csdn.net/20151024213003899?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2. 将签名生成的pacmanDemo_Cls.h文件拷贝到ClsCpp项目的根目录下
3. 找到jni.h和win32文件夹下的jni_md.h。它们在安装jdk的文件夹下,include文件夹,同样拷贝到项目根目录下
![](https://img-blog.csdn.net/20151024213106085?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4.然后在VS中右键头文件文件夹添加现有项把这个头文件包含进来,接下来就是编辑Cls.cpp文件。
pacmanDemo_Cls.h里边的样子:
所以Cls.cpp是这样子的
5.编译,生成解决方案,得到ClsCPP.dll
第三步:运行Java调用DLL程序
把产生的ClsCPP.dll文件拷贝到第一步产生.class的同一目录。
执行命令:java pacmanDemo/Main
运行查看效果
![](https://img-blog.csdn.net/20151024213615365?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20151024213620906?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
参考资料:
http://www.cnblogs.com/charley_yang/archive/2011/03/15/1985494.html
有问题请留言
第一步:编写Java端代码
定义一个Java类Cls
package pacmanDemo; /** * Created by DH on 2015-10-24. */ public class Cls { // 声明本地方法 public native void clear(); static { //加载DLL System.loadLibrary("ClsCPP"); } }定义一个调用类Main
package pacmanDemo; import java.util.Scanner; /** * Created by DH on 2015-10-24. */ public class Main { public static void main(String args[]){ final Cls clearScreen = new Cls(); Scanner sc = new Scanner(System.in); System.out.print("Hello, World"); String temp = sc.nextLine(); clearScreen.clear(); } }
编译之后在.class所在的pacmanDemo目录下执行javah pacmanDemo.Cls命令生成头文件pacmanDemo_Cls.h
若没有包,则直接javah Cls
第二步:生成DLL库
1. 打开VS,创建一个名称为ClsCpp的C++ Win32项目。在向导的应用程序类型处选择DLL,点完成。
设置Release+Win32编译配置。根据需要选择32位还是64位
2. 将签名生成的pacmanDemo_Cls.h文件拷贝到ClsCpp项目的根目录下
3. 找到jni.h和win32文件夹下的jni_md.h。它们在安装jdk的文件夹下,include文件夹,同样拷贝到项目根目录下
4.然后在VS中右键头文件文件夹添加现有项把这个头文件包含进来,接下来就是编辑Cls.cpp文件。
pacmanDemo_Cls.h里边的样子:
/* DO NOT EDIT THIS FILE - it is machine generated */ #include "jni.h" /* Header for class pacmanDemo_Cls */ #ifndef _Included_pacmanDemo_Cls #define _Included_pacmanDemo_Cls #ifdef __cplusplus extern "C" { #endif /* * Class: pacmanDemo_Cls * Method: clear * Signature: ()V */ // 下边这一句复制到Cls.cpp JNIEXPORT void JNICALL Java_pacmanDemo_Cls_clear (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
所以Cls.cpp是这样子的
#include "jni.h" #include "pacmanDemo_Cls.h" #include <stdio.h> #include <stdlib.h> JNIEXPORT void JNICALL Java_pacmanDemo_Cls_clear(JNIEnv *, jobject) { system("cls"); }
5.编译,生成解决方案,得到ClsCPP.dll
第三步:运行Java调用DLL程序
把产生的ClsCPP.dll文件拷贝到第一步产生.class的同一目录。
执行命令:java pacmanDemo/Main
运行查看效果
参考资料:
http://www.cnblogs.com/charley_yang/archive/2011/03/15/1985494.html
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统