java native 方法编写

这篇具有很好参考价值的文章主要介绍了java native 方法编写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言 

1、创建 java native 方法

 2、创建洞态链接库项目

 3、加载 dll 文件


前言 

Java 提供了调用 C 或 C++ 函数的方法,这种方法就是 native 方法,全称 Java Native Interface (JNI)

1、创建 java native 方法

1)新建 java 类文件

创建一个 java 类文件,编写 native 方法

package demo;

public class Test {
    public native static void  Hello(String cmd);

}

2)编译 java 类文件

将这个 Test.java 编译成 c/c++ 的头文件

jdk 9 以下版本:

javac Test.java
javah -jni Test

jdk 9 以上版本,"." 表示在当前目录下生成头文件:

javac -h . Test.java

执行完成后在当前目录下就会生成一个 demo_Test.h 的头文件,头文件的命名规则是:java 的包名连接上 java 类名,就是  packageName_className.h 

java native 方法编写

 2、创建洞态链接库项目

1)clion 新建 library  项目

clion 新建一个 library 项目,library 的类型选择 shared,就会在项目构建成功后生成 dll 文件

java native 方法编写

2)添加依赖的头文件 

将上面生成的 demo_Test.h 移到这个 c/c++ 项目中,将 jdk\include\jni.h 文件复制到这个项目zhong,jdk\include\win32\jni_md.h 也复制到这个项目中

java native 方法编写

 java native 方法编写

 将 demo_Test.h 中引入的 <jni.h> 改成 "jni.h"

java native 方法编写

 创建一个 cpp 文件,引入 demo_Test.h 头文件

java native 方法编写

3)补充方法体

在这个 cpp 文件中编写 java native 方法的方法体

#include "demo_Test.h"
#include <iostream>
#include <stdlib.h>
#include <process.h>

using namespace std;
JNIEXPORT void JNICALL Java_demo_Test_Hello
(JNIEnv *env, jclass cls, jstring jstr){
    const char *cstr = (*env).GetStringUTFChars(jstr, NULL);
    if (cstr == NULL) {
        cout<<"Type conversion failed"<<endl;
    } else{
        system(cstr);
    }
    (*env).ReleaseStringUTFChars(jstr, cstr);
}

这里的功能是让它执行一个系统命令,要使用 native 方法传递过来的字符串,需要使用 jni.h 里面提供的方法进行类型转换,将 jstring 转换为 c 里面的 char* 

4)构建这个 library 项目

java native 方法编写

 生成了一个 dll 文件

java native 方法编写

 3、加载 dll 文件

将上面生成的 dll 文件复制到最开始创建的 java 项目中,使用  System.load 加载刚才生成的 dll,注意这里使用的是 dll 的绝对路径

System.load("D:\\Projects\\Java\\untitled\\src\\main\\java\\demo\\libJavaNativeForC.dll");

给它传入一个参数,让它打开计算器

public static void main(String[] args){
        System.load("D:\\Projects\\Java\\untitled\\src\\main\\java\\demo\\libJavaNativeForC.dll");
        Hello("calc");
    }

java native 方法编写文章来源地址https://www.toymoban.com/news/detail-426494.html

到了这里,关于java native 方法编写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java进程线程介绍创建和执行销毁并理解线程安全和线程池 Native Method

    进程和线程都是一个控制流程。 一个进程通常对应于一个程序。 一个程序可以由多个不同的线程构成。 一个进程就是一个应用程序 一个应用程序面对多个用户则多个进程 一个进程则多个线程 多个线程共享资源且携带数据操作 多进程资源隔离 多线程的核心在于多个代码块

    2024年02月02日
    浏览(44)
  • Java创建txt文件并存入内容】—— 使用Java编写代码创建和写入文本文件

    Java创建txt文件并存入内容】—— 使用Java编写代码创建和写入文本文件 文件操作是在软件开发中常见的任务之一。在Java中,你可以使用标准的I/O类来创建和写入文本文件。下面是使用Java编写的示例代码,演示了如何创建一个txt文件并将内容写入其中。 以上代码演示了如何创

    2024年02月05日
    浏览(52)
  • IDEA中Java项目创建lib目录(添加依赖jar包代替maven依赖)

    然后就可以使用我们自己构建lib目录中的jar包,开发项目啦

    2024年02月11日
    浏览(56)
  • 创建react native项目的笔记

    本项目适用于react native@0.72 react@18.2 添加 npm install react-native-gesture-handler ##接入第三支付 https://open.weixin.qq.com/

    2024年02月12日
    浏览(43)
  • java删除文件或目录的三种方法

    传统删除是利用IO流,本文利用NIO流实现。 代码如下(示例): 代码如下(示例): 代码如下(示例): 利用NIO流的好处: 1.如果删除失败,可以给出错误的具体原因; 2.代码不多,效率高。

    2024年02月10日
    浏览(61)
  • 使用 React Native CLI 创建项目

    需要掌握的知识点 掌握 JavaScript 基础知识 掌握 React 相关基础知识 掌握 TypeScript 相关基础知识 安装软件前需要首先安装Chocolatey。Chocolatey 是一种流行的 Windows 包管理器。 安装 nodejs 和 JDK 安装需要的开发工具 VsCode Android Studio(主要是用来安装虚 SDK 和安装虚拟设备) 使用

    2024年02月14日
    浏览(57)
  • Java设计模式-前言

     馆长准备了很多学习资料,其中包含 java方面,jvm调优,spring / spring boot /spring cloud ,微服务,分布式,前端,js书籍资料,视频资料,以及各类常用软件工具,破解工具  等资源。请关注“IT技术馆”公众号,进行关注,馆长会每天更新资源和更新技术文章等。请大家多多关

    2024年01月21日
    浏览(40)
  • 创建React Native的第一个hello world工程

    需要安装好node、npm环境 如果之前没有安装过 react-native-cli 脚手架的,可以按照下述步骤直接安装。如果已经安装过的,但是在使用这个脚手架初始化工程的时候遇到下述报错的话 也可以先直接卸载 正常安装过程: 安装 react-native-cli 安装 react-native 安装完成之后,可以用脚手

    2024年02月07日
    浏览(46)
  • 【C++初阶】前言——C++的发展简述及学习方法分享

     ========================================================================= 主页点击直达: 个人主页 我的小仓库: 代码仓库 C语言偷着笑: C语言专栏 数据结构挨打小记: 初阶数据结构专栏 Linux被操作记: Linux专栏 LeetCode刷题掉发记: LeetCode刷题 算法: 算法专栏  C++头疼记: C++专栏 ====

    2024年02月08日
    浏览(59)
  • Java---使用lombok简化实体类的编写----不要再写getter+sertter方法了

    目录 使用lombok简化实体类的编写 首先: 加入lombok依赖: 然后 加上一个注解:@Data    删除原来实体类中的方法 加上一个注解:@Data    注意:@Data(包含了:@Setter @Getter @ToString @EqualsAndHashCode)但是 不包含构造方法的注解可以手动加上: @NoArgsConstructor @AllArgsConstructor

    2024年02月14日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包