JNI实战:Java调用VC图像转换DLL
169 浏览量
更新于2024-08-30
收藏 99KB PDF 举报
"Java进阶:JNI使用技巧点滴"
这篇资源是关于在32位Windows环境下使用Java Native Interface (JNI) 实现本地方法调用的文章。作者通过一个实际的图像转换项目来阐述JNI的运用,项目中利用Visual C++ 编译生成的DLL文件进行图像处理,然后通过Java的JNI调用来实现WEB页面上的图像转换功能。
文章介绍了以下知识点:
1. JNI基础:
- JNI允许Java代码调用本地(非Java)代码,例如C或C++,提供了一个桥梁连接Java虚拟机(JVM)和本地代码。
- 在Java类中,需要使用`native`关键字声明本地方法,但并不提供实现,而是通过JNI生成的头文件来实现。
- 使用`System.loadLibrary()`方法加载本地库,库名通常不包含扩展名(如.dll或.so),系统会根据平台自动识别。
2. Java代码示例:
- 示例展示了如何声明无包的本地方法,包括一个静态的`HelloWord()`方法和一个返回字符串的`cToJava()`方法。
- `static`关键字表示这些方法是类级别的,可以直接通过类名调用,无需创建对象。
- `javac`编译源码生成`.class`文件,然后使用`javah`工具生成对应的C语言头文件`MyNative.h`。
3. C/C++实现:
- 通过`javah`生成的头文件,开发者可以在C/C++环境中实现具体的本地方法,头文件中定义了Java方法对应的C函数原型。
- 对于静态方法,C函数会多一个额外的参数,即`JNIEnv *env`,而非静态方法则没有这个参数。
4. DLL生成与加载:
- 使用Visual C++ 编译C代码生成DLL文件,该DLL包含了JNI方法的实现。
- Java程序运行时,`System.loadLibrary()`会加载指定的DLL,使得Java代码可以调用其中的本地方法。
5. 项目实践:
- 作者提到的图像转换项目,先用VC封装图像处理功能到DLL,然后通过JNI在Java中调用这些功能,最后通过JavaBean来调用JNI生成的DLL,实现WEB端的图像转换服务。
6. 注意事项:
- 库的加载路径依赖于操作系统,Windows系统会从当前目录和"PATH"环境变量列出的目录中查找。
- 如果加载失败,会抛出`UnsatisfiedLinkError`异常。
通过这篇文章,读者可以了解到在Windows环境下使用JNI进行Java与本地代码交互的基本流程和技巧,对于开发涉及本地资源调用的Java应用具有指导意义。
2021-10-13 上传
2010-06-27 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2010-04-14 上传
weixin_38739164
- 粉丝: 8
- 资源: 951
最新资源
- AgileZap
- TagUI:创建TagUI示例以提高生产率
- generator-sails-plugin-hook:Yoeman 生成器创建帆钩,将其自身插入帆结构中
- 毕业设计&课设--趁早(quickearly)早餐外卖微信小程序--方便面的毕业设计.zip
- matlab-(含教程)基于sift特征提取的图像配准和拼接算法matlab仿真
- Excel模板00固定资产明细账.zip
- Hotel-Management-System:Django中的酒店管理系统
- dotfiles:我的dotfiles
- pscc2015:Capstone 2015 - 来自 KUB 与 PSTCC 的合作
- tlvc-api
- 毕业设计&课设--车辆管理系统本科毕业设计,php+mysql+python.zip
- matlab-(含教程)基于传感器融合(UWB+IMU+超声波)的卡尔曼滤波多点定位算法matlab仿真
- Excel模板收据打印模板.zip
- swipe-listener:零依赖性,最小化手势手势的Web侦听器
- chittiBirthday:学习NodeJS和Google云
- github-issue-agent:使用带有令牌的 Github 问题基础结构的 Node.js 项目