网站首页 > 精选文章 正文
前言
在研读《深入理解Java虚拟机》这本书时,看到Java虚拟机运行时数据区中有关本地方法栈(Native Method Stack)的概念,本地方法栈就是为调用Native方法服务的,被Native修饰的方法不是由Java语言实现的,可以是C/C++实现,然后通过JNI(Java Native Interface)实现调用。当然也有Java虚拟机栈,是为Java方法服务的。本篇主要是想熟悉怎么样去调用Native方法。
通过JNI调用C++方法
- 通过java代码调用C++的方法
import java.io.File;
public class Main {
static {
System.load("E:" + File.separator + "test.dll");
}
public native static void TestOne();
public static void main(String[] args) {
TestOne();
}
}
- 通过javac Main.java编译生成Main.class文件,然后执行javah Main会生成Main.h文件,目的就是为指定的类中的Native方式生成.h文件
- 通过visual studio 2022创建一个C++的项目test,生成的dll名称需要和上述Java代码中加载的类库名称要一致
- 将上面生成的Main.h,以及%JAVA_HOME/include/jni.h%和%JAVA_HOME/include/win32/jni_md.h%,三个文件复制到test目录下,如图所示:
- 将上面三个文件添加到头文件中
- 修改一下Main.h中的#include <jni.h>改成#include "jni.h"
- 添加C++源文件Hello.cpp并添加如下的内容
#include "pch.h"
#include <iostream>
#include "Main.h"
using namespace std;
JNIEXPORT void JNICALL Java_Main_TestOne
(JNIEnv*, jclass)
{
cout << "hello sherman" << endl;
}
- 生成项目,复制test.dll,到E:\下(我这里是64位)
- 直接运行java程序可以看到输出结果:"hello sherman"
- 上一篇: JAVA工程师面试考试测试题(Java面试题HR必备)
- 下一篇:已经是最后一篇了
猜你喜欢
- 2025-07-01 JAVA工程师面试考试测试题(Java面试题HR必备)
- 2025-07-01 干货 | Java语言这10个语言特性你知道吗?
- 2025-07-01 JavaCPP快速入门(官方demo增强版)
- 2025-07-01 Java编程入门第一课:HelloWorld(java编程如何入门)
- 2025-07-01 JVM系列之ClassLoader(jvm classloader)
- 2025-07-01 深入理解Java虚拟机之自己编译JDK
- 2025-07-01 函数入口一定是main吗?为什么不指定编译生成文件名, 默认是a.out?
- 2025-07-01 新手小白学Java|零基础入门笔记|原来学Java可以这么简单
- 2025-07-01 15.将一个给定的PDF文档拆分为多个文档(JAVA+PDFBOX)
- 2025-07-01 编程语言第一:JAVA——java开发环境
- 最近发表
-
- Java中的native方法(native java api)
- JAVA工程师面试考试测试题(Java面试题HR必备)
- 干货 | Java语言这10个语言特性你知道吗?
- JavaCPP快速入门(官方demo增强版)
- Java编程入门第一课:HelloWorld(java编程如何入门)
- JVM系列之ClassLoader(jvm classloader)
- 深入理解Java虚拟机之自己编译JDK
- 函数入口一定是main吗?为什么不指定编译生成文件名, 默认是a.out?
- 新手小白学Java|零基础入门笔记|原来学Java可以这么简单
- 15.将一个给定的PDF文档拆分为多个文档(JAVA+PDFBOX)
- 标签列表
-
- 向日葵无法连接服务器 (32)
- git.exe (33)
- vscode更新 (34)
- dev c (33)
- git ignore命令 (32)
- gitlab提交代码步骤 (37)
- java update (36)
- vue debug (34)
- vue blur (32)
- vscode导入vue项目 (33)
- vue chart (32)
- vue cms (32)
- 大雅数据库 (34)
- 技术迭代 (37)
- 同一局域网 (33)
- github拒绝连接 (33)
- vscode php插件 (32)
- vue注释快捷键 (32)
- linux ssr (33)
- 微端服务器 (35)
- 导航猫 (32)
- 获取当前时间年月日 (33)
- stp软件 (33)
- http下载文件 (33)
- linux bt下载 (33)