Java JNI初体验

Java JNI初体验

JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。 从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。

下面我们通过实现一个 java JNI方法来体验一下

通过Java来调用 C++ 代码

步骤一、编写Java类

import java.io.File;

public class TestMain {

    /**
     * 通过静态代码块 加载 .dll 文件
     * File.separator   表示盘符分割符,
     */
    static
    {
        System.load("D:" + File.separator + "Hello.dll");
    }

    /**
     * 定义一个  native 方法
     */
    public native static void Hello();

    public static void main(String[] args)
    {
        //调用该方法
        Hello();
    }
}

通过javac 编译该java文件

javac TestMain.java

步骤二 生成该类中native 方法对应的c++头文件

1、执行 javah 生成头文件

在这里插入图片描述

javah -jni TestMain

执行上面的命令后会发现classpath目录下增加了一个.h结尾的头文件
在这里插入图片描述

2、打开 VS2012

  • 点击文件–>新建–>项目,命名为“Hello”,和我们静态块中load进去的名字要一致
    在这里插入图片描述

  • 点击下一步
    在这里插入图片描述

  • 按照截图上的配置进行配置,并点击完成
    在这里插入图片描述

  • 将刚才由javah 创建的.h文件复制到新创建的C++目录中
    在这里插入图片描述

  • 将这个.h文件添加到现有项中

右键头文件–>添加–>现有项,选择Hello目录下的TestMain.h添加进去!

在这里插入图片描述

  • 添加一个.cpp源文件,编写调用代码

右键 源文件–>添加–>新建项,选择.cpp文件,随便命名,我叫做source.cpp

在这里插入图片描述

代码很简单就输出一句 Hello Java JNI

#include<iostream>

#include "TestMain.h"

using namespace std;

//这个方法头是从 javah 生成的头文件中复制过来的,不了解c++的可以直接复制过来,即可
JNIEXPORT void JNICALL Java_TestMain_Hello
  (JNIEnv *, jclass)
{
	cout << "Hello Java JNI" <<endl;
}
  • %JAVA_HOME%/include 中的jni.h%JAVA_HOME%/include/win32/中的jni_md.h两个文件复制到Hello项目中。
    在这里插入图片描述
    将这两个头文件也按照上面的方法添加到头文件的现有项中,
    最终头文件共有三个
    在这里插入图片描述

  • 修改TestMain.h文件中#include <jni.h>#include "jni.h"

生成

单击上的工具类 生成 -> 生成解决方案

在这里插入图片描述
这样生成的.dll文件是32位系统下的,通过配置也可以生成64位系统下的.dll
在这里插入图片描述
在这里插入图片描述

这样就可以生成64位系统下的.dll文件了!

运行 java程序,即可打印出我们在c++中输出的Hello Java JNI

一定要将我们生成的.dll文件放到我们java中指定的目录中!!

Windows Power Shell

在这里插入图片描述

IDEA

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7UVSW2v5-1584706973722)(http://note.youdao.com/yws/res/10890/WEBRESOURCE65ed245bbf470b7f32104fc0ff10e1d3)]

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值