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利用进程间通信,事件分离,动态链接和并发 ...
随机推荐
- nyoj_253:LK的旅行(旋转卡壳入门)
题目链接 求平面最大点对. 找凸包 -> 根据凸包运用旋转卡壳算法求最大点对(套用kuang巨模板) 关于旋转卡壳算法 #include<bits/stdc++.h> using n ...
- Protobuf动态解析在Java中的应用 包含例子程序
最近在做ProtoBuf相关的项目,其中用到了动态解析,网上看了下相关资料和博文都比较少,自己来写一个记录一下学习过程. Protocol Buffers是结构化数据格式标准,提供序列化和反序列方 ...
- JavaScript DOM编程艺术读后感(1)—— 平稳退化
最近,在读<JavaScript DOM编程艺术(第二版)>这本书,想着将自己的读后感记录下来,作为记忆吧. 其实我并不是最近才刚开始读这本书的,我读了有一段时间了.我是一名web前端开发 ...
- Groovy - 介绍
Groovy 是 用于Java虚拟机的一种敏捷的动态语言,它是一种成熟的面向对象编程语言,既可以用于面向对象编程,又可以用作纯粹的脚本语言.使用该种语言不必编写过多的代码,同时又具有闭包和动态语言中的 ...
- eclipse上传新项目到GitHub
1.登录gibhub,创建一个仓库 2.提交本地仓库 右键本地项目 选择git,然后点击next 如图: 再右键项目,commit项目,这是提交到本地git 3.接下来提交到github 输入gith ...
- java加减的二进制实现
Java中整数基本类型有byte,short,int,long,大小分别为1.2.4.8个字节,一个字节大小为8位,也就是8个二进制码(0/1)组成. 计算机中二进制码分为原码,反码,补码.在计算机中 ...
- 微信小程序 服务器端生成用户登陆环节的 3rd_session
一.环境: CentOS 6.8 nginx 1.8.0 php 7.0.10 二.背景 最近在开发一个微信小程序,不可避免的涉及到登陆的环节,登录时序图如下: 通过 wx.login() 获取到用户 ...
- (转)java提高篇(一)-----理解java的三大特性之封装
从大二接触java开始,到现在也差不多三个年头了.从最基础的HTML.CSS到最后的SSH自己都是一步一个脚印走出来的,其中开心过.失落过.寂寞过.虽然是半道出家但是经过自己的努力也算是完成了“学业” ...
- Mac下安装 MongoDB
Mac 下安装 MongoDB 一般有两种方法,一种是通过源码安装,一种是直接使用 homebrew ,个人推荐使用 homebrew ,简单粗暴. 1.安装 homebrew : /usr/bin/ ...
- js中常用的日期总结
js开发中经常用到日期,这里总结一下: /** * 获取当前日期 * 格式:2017-07-31 13:45:14 */ function getNowFormatDate() { var date ...