代码与实际图片有一定出入
有问题请留言
第一步:编写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