Windows下JNI的使用教程
JNI的使用大致有以下4个步骤:
一、在Java中写native方法
二、用javah命令生成C/C++头文件
三、写对应的C/C++程序实现头文件中声明的方法,并编译成库文件
四、在Java中加载这个库文件并使用
工具:
1. Eclipse for Java
2. Visual Studio 2015
依赖:
JDK和JRE:1.8.0_144版本
步骤:
在Eclipse新建一个java项目
添加一个java类,放在com.jni包下
注意:java代码都不要放到默认包下(就是不写package语句就会放到默认包),默认包下的方法在其他地方都不能调用!!
写native方法,native方法就是声明一个非java实现的方法,比如用C/C++实现
package com.jni;
public class JNI {
public native String getString();
}
在Eclipse生成,此时在项目目录会生成对应的.class文件,Eclipse会将.class文件放在项目目录的bin文件夹下

打开cmd,进入bin目录

运行javah命令,生成C/C++头文件,注意要带上java包名
注意:此处是在bin目录运行javah,不能进入com/jni下来运行javah,否则不能生成头文件。

此时在bin目录下生成了JNI.h头文件

头文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_jni_JNI */ #ifndef _Included_com_jni_JNI
#define _Included_com_jni_JNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_jni_JNI
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_jni_JNI_getString
(JNIEnv *, jobject); #ifdef __cplusplus
}
#endif
#endif
接下来打开Visual studio 2015,创建一个空的win32控制台程序,在程序类型选择DLL:

配置JNI开发环境:
在【项目设置】 -> 【VC++目录】 -> 【包含目录】中,添加JNI头文件的路径
JNI头文件一般放在jdk目录下的include文件夹,还有include文件夹下的win32文件夹
注意release和debug以及32位和64位的选择


将刚刚生成的头文件复制到vs项目目录下,在项目中添加该头文件,同时添加cpp实现头文件中的函数

main.cppd代码如下:
#include "com_jni_JNI.h" JNIEXPORT jstring JNICALL Java_com_jni_JNI_getString
(JNIEnv *env, jobject obj) {
return env->NewStringUTF("string from C++");
}
生成项目,在项目目录的x64或release文件夹下生成了JNI.dll动态库,讲dll文件复制到Eclipse项目目录下

修改JNI.java代码,加载JNI库并添加运行代码
package com.jni;
public class JNI {
static {
System.loadLibrary("JNI");
}
public native String getString();
public static void main(String args[]) {
JNI jni = new JNI();
System.out.println(jni.getString());
}
}
生成并运行,就可以看到从c++中返回的字符串了

Windows下JNI的使用教程的更多相关文章
- Windows 下安装 Oracle 12c 教程
原文 Windows 下安装 Oracle 12c 教程 申明:本文原作者:Jmq 本文给大家带来的是 Oracle 12C 的安装教程. 1.准备 1.1 下载 Oracle 12c 安装程序 ...
- 图解Windows下 GIT GUI 使用教程
https://jingyan.baidu.com/article/19020a0a7ae6af529c284248.html 本篇经验将和大家介绍Windows下 GIT GUI 使用教程,希望对大 ...
- Windows下安装MySQL详细教程
Windows下安装MySQL详细教程 1.安装包下载 2.安装教程 (1)配置环境变量 (2)生成data文件 (3)安装MySQL (4)启动服务 (5)登录MySQL (6)查询用户密码 (7 ...
- windows下安装dirmap详细教程
今天安装一下dirmap,纯小白非常详细的安装过程 1.先去下载dirmap 下载地址:https://github.com/H4ckForJob/dirmap 点这个绿色的code,然后再点下面这个 ...
- windows下Gulp入门详细教程 &&gulp安装失败的原因(红色)
以下教程亲自实践可行: 另外添加一个Gulp自动编译.压缩.更新.测试的教程链接:https://markpop.github.io/2014/09/17/Gulp%E5%85%A5%E9%97%A8 ...
- Windows下JNI执行步骤
问题描述: java JNI使用 问题解决: JNI编写步骤: (1)编写带有native声明的方法的java类 (2)使用javac编译所写的java类,然后使用javah生成扩展名 ...
- windows下 jdk1.7安装教程图解
java编程的初学者在开始编码前都会遇到一个难题,那就是jdk1.7环境变量配置怎么操作,怎么安装,针对这个难题,小编特地为大家整理相关教程,不了解的朋友可以前往查看使用. 软件说明 虽然现在jdk出 ...
- Windows下PyInstaller的使用教程
直接使用Python开发的软件时有许多不方便的地方,如需要安装特定的Python环境,需要安装依赖库.为了便于部署,需要将Python源代码编译成可执行文件,编译后的可执行文件就能脱离python环境 ...
- windows下ACE安装使用教程(转)
ACE简介:ACE是一个跨平台的用于并发通信的C++框架.它提供了丰富的C++封装器和框架组件.使用ACE,开发者可以开发出高性能,实时的通信服务和应用.ACE利用进程间通信,事件分离,动态链接和并发 ...
随机推荐
- pyqt5 在qt designer后以弹窗的方式连接多个UI图形界面
当我们通过pyqt开发时,eric6为我们提供了一个方便的工具:图形化的绘制UI工具--qt designer. 我们可以通过它开发多个UI,然后利用信号-槽工具,将功能代码附着在上面.也可以将多个界 ...
- guava缓存底层实现
摘要 guava的缓存相信很多人都有用到, Cache<String, String> cache = CacheBuilder.newBuilder() .expireAfterWrit ...
- python有三种导入模块的方法(转)
原文:http://www.cnblogs.com/allenblogs/archive/2011/11/15/2055149.html python有三种导入模块的方法 其一, import mod ...
- EF 数据库迁移(Migration)
Update-Database -ConnectionStringName "MyConnectionString"
- Web测试与APP测试有哪些异同?
1.相同点 不管是传统行业的web测试,还是新兴的手机APP测试,都离不开测试的基础知识,即是不管怎么变,测试的原理依然会融入在这两者当中. 1)设计测试用例时,依然都是依据边界值分析法.等价类划分等 ...
- Keras Xception Multi loss 细粒度图像分类
作者: 梦里茶 如果觉得我的工作对你有帮助,就点个star吧 关于 这是百度举办的一个关于狗的细粒度分类比赛,比赛链接: http://js.baidu.com/ 框架 Keras Tensorflo ...
- POJ1975 Median Weight Bead floyd传递闭包
Description There are N beads which of the same shape and size, but with different weights. N is an ...
- 命令控制台与java环境配置
1. 命令控制台 1) Linux / Unix 命令格式 command [-选项...] [参数...] 如: ls -a ~ mkdir .demo //创建隐藏目录 ...
- 米扑科技的开源项目:sitemap-php 自动生成网站地图
米扑科技旗下的产品,近期正在做SEO网站优化,其中子需求之一是调研实现了网站地图(sitemap.xml) 封装简化了许多功能模块,现在分享出来,源代码可在Github上下载,有简单的示例. Gith ...
- mybatis 详解(十一)------ mybatis和spring整合
想要整合mybatis和spring,那么我们首先要知道这两个框架是干嘛的,对于mybatis我们前面几篇博客已经有了很详细的介绍,我们通过加载mybatis-configuration.xml 文件 ...