java使用动态链接库
java使用动态链接库
java可以使用native关键字调用第三方库,现在我们简单使用当前两种操作系统的库编写第三方接口来支持java调用
- 先定义好java的对应接口
package chingee.test.dll;public class HelloWorld {public native void sayHello();}
- 使用java命令生成对应接口的Java native inteface,也就是C语言中的头文件
javah -d jni -classpath target/classes -jni chingee.test.dll.HelloWorld
会在jni目录下生成chingee_test_dll_HelloWorld.h,内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class chingee_test_dll_HelloWorld */#ifndef _Included_chingee_test_dll_HelloWorld
#define _Included_chingee_test_dll_HelloWorld
#ifdef __cplusplus
extern "C" {#endif
/** Class: chingee_test_dll_HelloWorld* Method: sayHello* Signature: ()V*/
JNIEXPORT void JNICALL Java_chingee_test_dll_HelloWorld_sayHello(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif
适用于windows的DLL
- 使用VS创建一个动态链接库项目
- 将上面生成的头文件chingee_test_dll_HelloWorld.h放到项目的根目录下,并将JDK中的jni.h(JAVA_HOME/include)和jni_md.h(JAVA_HOME/include/win32)也放到根目录下
- 修改chingee_test_dll_HelloWorld.h的引用
// #include <jni.h>
#include "jni.h"
- 创建HelloWorld.cpp
#include "pch.h"
#include "HelloWorld.h"
#include "chingee_test_dll_HelloWorld.h"JNIEXPORT void JNICALL Java_chingee_test_dll_HelloWorld_sayHello
(JNIEnv*, jobject)
{printf("Hello World!");// 输出 Hello World
}
- 生成dll动态库
- 在项目HelloWorld/x64/Debug可以查看对应文件
适用于linux的SO
TODO
java使用动态库
- 可以将HelloWorld.dll放到java.library.path,java运行时就可以直接使用
- 在代码中热加载HelloWorld.dll
package chingee.test.dll;import java.io.File;
import java.io.IOException;/*** Hello world!**/
public class App {public static void main(String[] args) throws IOException {File directory = new File("");directory = directory.getCanonicalFile();directory = new File(directory.getParentFile().getParentFile(), "c++\\HelloWorld\\x64\\Debug\\HelloWorld.dll");// 1. 直接加载动态链接库System.load(directory.getAbsolutePath());// 2. 加载java.library.path中的文件名为Testdll的动态链接库// System.loadLibrary("Testdll");HelloWorld helloWorld = new HelloWorld();helloWorld.sayHello();}
}
java使用动态链接库相关推荐
- java 调用动态链接库_JAVA技巧:JNative调用动态链接库问题(SOS)
动态链接库的方法如下:__declspec(dllexport) ret __stdcall rLachTran(const char *pc_trancode, const char *pc_cli ...
- JAVA调用动态链接库
上一篇<JAVA本地接口(JNI)>中介绍了JAVA的JNI技术,通过JAVA自有的方式调用动态链接库,这一篇将继续为大家介绍使用其他方式调用动态链接库. 首先,我们编写一个用于测试的链接 ...
- Java调用动态链接库读取RFID
1.java要读取动态连接库,首先要有库文件,即dll文件,jdk中自带的有一部分dll文件,但是大部分情况下我们都是调用自己的库文件,这个时候就要把dll文件加载到java.library.path ...
- java中被遗忘的native关键字
我是无意间看见JNI( java调用动态链接库dll )这块的东西. 所有记下来:本地声明方法 装载完成dll文件后,将使用的方法用native关键字声明. public native static ...
- java jni调用dll_浅谈JNI的使用--java调用dll(原创)
什么是JNI?Java Native Interface(Java本地接口)的简写.使用这个接口,可以轻松实现java对动态链接库Dynamic Link Library(dll)文件的调用,以实现一 ...
- Java Swing/AWT和GTK混合GUI编程
首先用C语言的GTK生成动态链接库,然后利用java的native方法调用该动态链接库就可以了,是不是很简单. 环境: JDK 8: OS:CentOS5: GTK:gtk+-2.0 首先看下我的文件 ...
- JAVA文件搜索过程中如何得到各种文件内容(office文件,PDF,邮件,mht,思维导图等)
现在流行的搜索引擎 Lucene, Elasticsearch处理文件搜索时一般使用 tika,使用tika 处理文件正文搜索还好,但搜索结果显示正文等操作不是很方便,并且tika提取正文的速度比较慢 ...
- 用java实现网络爬虫,实时获取中国地震台网数据
用java实现网络爬虫,实时获取中国地震台网数据 1.如何从网络中爬取相关数据 2.怎么进行数据处理 3.绘图设计 4. 存在问题: 5.java程序的源文件 5.1 爬虫程序 5.2 绘制柱状图程序 ...
- java 多媒体_Java播放多媒体
Java对多媒体文件的支持很差,自带的库只能播放 .mp3 等有限的几种格式的文件,连 .wma 都不支持.所以,要想用 Java 播放几种常见的多媒体文件,就得救助外部的第三方库. 目前用Java播 ...
最新文章
- 开启报名 | 青源 Salon 第 1 期:强化学习专场,报告,海报,激辩,这是年轻人的会场
- js各种方法继承以及优缺点
- java8使用stream操作集合类,如何使用bigDicemal计算工资?
- androidpn的学习研究(八)androidpn 中业务类XmppIoHandler实现分析
- SaaS:新智能背景下重构各个领域的生态系统
- [转载] Python numpy insert()、 delete()、append()函数的用法
- protobuf java学习
- k-d Tree及其Java实现
- UDS常用诊断服务介绍
- Java连接db2数据库(常用数据库连接五)
- ThreadX内核源码分析 - 事件
- ARCGIS Pro试用申请教程以及登录页面脚本错误解决办法
- 网易的java开发_网易微专业java开发工程师2021
- 涅普计划-web入门简介笔记
- MIUI黑科技之小米直达服务:Web 般的流畅体验+更少的卡顿、延迟
- 35岁以上的那些测试员何去何从?
- 微信支付找不到sdk
- js 数组(定义数组,数组长度,数组计算,元素类型转换)
- 智能化CSS检测法,好优化拒绝冗杂代码
- DELL XPS 15 9570 LA-G341P DDP00/DDB00 REV 1.0(A00)笔记本点位图