Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。
可以将native方法比作Java程序同C程序的接口,其实现步骤:
1、在Java中声明native()方法,然后编译;
2、用javah产生一个.h文件;
3、写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);
4、将第三步的.cpp文件编译成动态链接库文件;
5、在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。
JAVA本地方法适用的情况
1.为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问
2.为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的
3.为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。
首先写好JAVA文件
/*
* Created on 2005-12-19 Author shaoqi
*/
package com.hode.hodeframework.modelupdate;
public class CheckFile
{
public native void displayHelloWorld();
static
{
System.loadLibrary("test");
}
public static void main(String[] args) {
new CheckFile().displayHelloWorld();
}
}
然后根据写好的文件编译成CLASS文件
然后在classes或bin之类的class根目录下执行javah -jni com.hode.hodeframework.modelupdate.CheckFile,
就会在根目录下得到一个com_hode_hodeframework_modelupdate_CheckFile.h的文件
然后根据头文件的内容编写com_hode_hodeframework_modelupdate_CheckFile.c文件
#include "CheckFile.h"
#include
#include
JNIEXPORT void JNICALL Java_com_hode_hodeframework_modelupdate_CheckFile_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
之后编译生成DLL文件如“test.dll”,名称与System.loadLibrary("test")中的名称一致
vc的编译方法:cl -I%java_home%\include -I%java_home%\include\win32 -LD com_hode_hodeframework_modelupdate_CheckFile.c -Fetest.dll
最后在运行时加参数-Djava.library.path=[dll存放的路径]
- 浏览: 952012 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (383)
- JSP 自定义标签实现 (1)
- JSP (2)
- javascript (161)
- JAVA (100)
- HTML (26)
- jQuery (11)
- J2EE (1)
- Log4J (1)
- HTML5 (6)
- DB2 (2)
- Spring (14)
- 浏览器兼容 (1)
- JavaMail (1)
- JAVA(转载) (1)
- freemarker (1)
- 项目管理 (1)
- 项目架构学习 (1)
- Oracle (11)
- 开源项目 (2)
- 网络编程 (4)
- C (1)
- C++ (0)
- Xpath (1)
- 待写 (10)
- JXL (1)
- XML (1)
- JNDI (2)
- POI (8)
- Struts2 (3)
- 异常解决方法 (1)
- Sql Server (2)
- windows (2)
- SqlServer (1)
- 前端 (1)
- 正则表达式 (2)
- 浏览器兼容问题 (2)
- 转载 (25)
- css (11)
- svn (5)
- 工程构建 (1)
- 好用的网站 (1)
- sql (3)
- chrome V8 (1)
- javacript 报表 (1)
- FusionCharts (1)
- eclipse (2)
- tomcat (4)
- hibernate (2)
- 硬件 (1)
- 杂烩 (1)
- Linux (1)
- ubuntu (1)
- 设计模式 (2)
- 缓存 (1)
- 数据库 (1)
- JVM (2)
- DOM4j (1)
- 其他 (1)
- JACOB (1)
- extjs (3)
- ligerUi (1)
- 在线HTML编辑器 (1)
- API (1)
- OpenOffice (1)
- webservice (1)
- json (1)
- 百度map (1)
- NodeJs (1)
- greeplum jdbc spring (1)
- easyui (1)
- hightchart (1)
- 游戏 (1)
- HttpClient (1)
- 正则 (1)
- canvas (4)
- HTML5,javascript,canvas (0)
最新评论
-
changelo:
缺少了秦皇岛市
中国省,市,区 json数据 -
yurui829:
解析配置行那等号前后有可能有空格,改为如下比较好:String ...
java 读取.ini配置文件工具类 -
贝塔ZQ:
poi生成excel文档,感觉蛮复杂的,可以试试用pageof ...
POI生成excel带下拉 -
langke93:
我发现greenplum 通过jdbc insert性能很差, ...
jdbc 配置连接greeplum数据,spring配置连接greeplum数据(简单配置学习) -
zhutulang:
哪有收邮件???
Spring 邮件接收发送实例
发表评论
-
JAVA IO 字节流实现文件copy效率比较
2014-12-24 13:32 3344package jonavin.io; import ... -
EhCache简单例子
2014-10-20 17:04 1186import net.sf.ehcache.Cache; ... -
java 读取.ini配置文件工具类
2014-10-09 16:29 9408import java.io.BufferedReader; ... -
POI读取excel文件通用代码(增强版--支持返回javaBean集合)---2003,2007
2014-09-25 13:21 2938import java.io.File; import j ... -
HttpClient模拟get,post请求并发送请求参数(json等)
2014-09-18 16:33 16939import java.io.IOException; ... -
POI读取Excel通用代码---支持2003,2007
2014-09-18 14:07 2154package com.citics.crm.custome ... -
将数据库树形记录转为java 树形数据结构
2014-08-24 18:36 4789/** * 转换为Tree结构 * @p ... -
java HTML2PDF HTML2DOC THML2Image 后台屏幕截图
2014-08-15 11:22 1295网上找的,下载学习吧。 -
java缓存技术学习
2014-07-25 18:05 5941package com.citics.crm.custome ... -
java unicode 转中文(学习用)
2014-07-10 09:47 1194第一种方式自己实现(笨,但可以知道原理) /** ... -
java+javascript获得两个日期之间的所有月份
2014-05-30 12:29 3277java版 ... -
java开发中有用的工具类
2014-01-03 14:51 0自己备用,不公开 -
java模拟调用Servlet
2013-12-26 13:27 1182public static void main(String ... -
JSOUP 网络爬虫
2013-12-17 10:17 873简单例子学习用 -
javax 邮件发送
2013-10-21 10:20 2467import java.util.Date; import ... -
[JODConverter]word转pdf心得分享(转)
2013-10-10 14:48 1927官方网站: http://www.artofsolving. ... -
java MD5机密工具
2013-09-13 09:33 1230/************************* ... -
JAVA 将文件转换为字节
2013-09-06 10:20 1344package com.tacct.tradecontrac ... -
javaBean转Map工具类
2013-09-05 13:37 9641package com.tacct.tradecontrac ... -
JAVA 操作blob数据然后生成word文件
2013-09-05 11:27 2106import java.io.*; import jav ...
相关推荐
总的来说,理解和实现"C++ JNI多线程回调java"涉及到对JNI接口的深入理解,对多线程编程的掌握,以及对Java并发模型的认识。这是一个高级的跨语言编程话题,需要开发者具备扎实的C++和Java基础。在实际项目中,这样...
一、认识 native 即 JNI,Java Native Interface 凡是一种语言,都希望是纯。比如解决某一个方案都喜欢单单这个语言来写即可。Java平台有个用户和本地C代码进行互操作的API,称为Java Native Interface (Java...
- **异常处理**:在JNI中调用Java方法时,如果抛出异常,需要捕获并适当地处理。 - **性能优化**:虽然JNI可以提升性能,但过度使用可能导致代码复杂性和维护难度增加。合理评估何时使用JNI。 总结,通过"android ...
这篇教程将带你了解如何在Windows环境下创建一个简单的JNI项目,让你对JNI有一个初步的认识。 首先,我们需要准备以下组件: 1. **HelloWorld.java** - 这是我们的Java源代码,它包含了JNI函数的声明和Java方法...
为了进一步学习和应用这个示例,你需要具备Java编程基础,了解JNI原理,以及对Windows COM组件有一定的认识。如果你遇到任何问题,可以查阅Jacob的官方文档,或者搜索相关的Java和Windows语音合成教程,这将帮助你更...
8. **异常处理**:解释如何在JNI中捕获和处理Java异常。 9. **线程支持**:讨论在JNI中创建和管理线程,以及如何在Java和本地代码之间同步。 10. **内存管理**:说明如何在JNI中分配和释放内存,避免内存泄漏。 ...
3. **`JNIEnv`指针**:在JNI中,`JNIEnv`是一个指向结构体的指针,包含了执行Java方法、访问Java对象等操作所需的所有函数。它是每次Java方法调用时由JVM提供的,用于在本地代码和Java代码之间进行通信。 4. **JNI...
《Android.JNI - NDKHelloWorld》 在Android开发中,JNI(Java Native Interface...通过本教程中的“NDKHelloWorld”实例,你应该对Android JNI和NDK有了初步的认识,进一步的学习和实践将帮助你更好地掌握这一技术。
Android JNI(Java Native Interface)是Android开发中的一个重要概念,它为Java代码和其他语言(如C++、C)的代码提供了一个交互的桥梁。在Android应用开发中,JNI被广泛用于性能优化、调用系统底层库或者利用已有...
JNI(Java Native Interface)是一种标准的 Java_Native Interface,用于实现 Java 代码与 native 代码的交互。使用 JNI 调用动态库需要按照以下步骤进行: 1. 首先,需要在 VS2008 中编写测试动态库 testDll,添加...
Android JNI(Java Native Interface)是Android系统中用于Java与C/C++代码交互的桥梁,它允许开发者在Android应用中调用本地(Native)代码,实现性能优化或利用已有的C/C++库。在这个实例中,我们将深入理解JNI的...
此实例演示了如何在JNI中处理各种Java数据类型,如整型、浮点型、字符串等。Java数据类型需要转换为对应的JNI数据类型,例如`jint`、`jdouble`、`jobject`等。同时,本地方法可以接受Java对象作为参数,例如数组或...
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在Android世界中的应用广泛,特别是在性能优化、调用本地库、与硬件设备交互等方面。本教程...
Java编程是IT领域中最受欢迎的编程语言之一,尤其在企业级应用开发中占据主导地位。"JAVA Programe.rar_Java2"这个...同时,结合《java2参考大全》的理论部分,可以形成理论与实践的完美结合,对Java编程有更深的认识。
7. **JNI(Java Native Interface)**:如果你需要与C/C++库进行交互,JNI提供了一种方式,让JAVA代码能够调用本地方法。 8. **Swing和AWT**:这部分内容会介绍JAVA的图形用户界面(GUI)编程,如如何使用Swing和AWT...
通过运行DEMO,开发者和使用者可以直观地了解如何集成DHQP300视频采集卡到自己的系统中,同时也能对JAVA和C++的结合使用有一个清晰的认识。 总的来说,这个资源对于正在从事JAVA环境下视频处理和采集卡开发的人员来...
相信看完之后,大家对NDK开发有了一个概念上的认识了,那么接下来我们需要再深入一下NDK的开发,我们知道NDK开发就是使用JNI这层“协议”在Java和C之间起个“桥梁”的作用,将Java和Native C之间联立起来,让Java和C...
3. **JNI(Java Native Interface)**:由于Vim原生支持许多复杂的文本处理和编辑命令,如果要在Java中实现类似的功能,可能需要通过JNI调用C或C++编写的库,尤其是涉及到终端控制和文本模式交互的部分。 4. **GUI...
13. **JNI(Java Native Interface)**:当需要调用本地(非Java)代码时,JNI提供了一种桥梁。它可以让你编写C/C++代码并与Java代码交互。 14. **Java SE、Java EE与Java ME**:Java分为三个版本,SE(Standard ...
这包括Java的创始人、版本迭代和应用领域,让读者对Java有一个全面的认识。 第二章会讲解Java环境的搭建,包括安装Java Development Kit (JDK)、配置环境变量,以及设置开发工具,如Integrated Development ...