- 浏览: 1502404 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会。
AD: <script src="http://www.51cto.com/js/article/keywords_ad_new.js"></script>
有了JAVA标准平台的支持,使JNI模式更加易于实现和使用。在此总结了下面这个知识图:
实例:
环境说明:ubuntu 10.4.2 LTS系统
程序清单1:src/com/magc/jni/HelloWorld.java
- /**
- *
- */
- package com.magc.jni;
- /**
- * @author magc
- *
- */
- public class HelloWorld {
- static {
- System.loadLibrary("Hello");
- }
- public native void DisplayHello();
- /**
- * @param args
- */
- public static void main(String[] args) {
- new HelloWorld().DisplayHello();
- }
- }
进入src目录下,编译该JAVA类,
命令:javac ./com/magc/jni/HelloWorld.java
在该HelloWorld.java所在目录下生成HelloWorld.class
然后使用javah生成头文件,
命令:javah -jni com.magc.jni.HelloWorld
在当前目录下生成com_magc_jni_HelloWorld.h头文件,此文件供C、C++程序来引用并实现其中的函数
程序清单2:com_magc_jni_HelloWorld.h
注:1)、此头文件是不需要用户编译的,直接供其
- /* DO NOT EDIT THIS FILE - it is machine generated */
- #include <jni.h>
- /* Header for class com_magc_jni_HelloWorld */
- #ifndef _Included_com_magc_jni_HelloWorld
- #define _Included_com_magc_jni_HelloWorld
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Class: com_magc_jni_HelloWorld
- * Method: DisplayHello
- * Signature: ()V
- */
- JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello
- (JNIEnv *, jobject);
- #ifdef __cplusplus
- }
- #endif
- #endif
它C、C++程序引用。
2)、此头文件中的Java_com_magc_jni_HelloWorld_DisplayHello(JNIEnv *, jobject)方法,是将来与动态链接库交互的接口,并需要名字保持一致。
程序清单3:src/jni_helloworldImpl.cpp
- #include <jni.h>
- #include "com_magc_jni_HelloWorld.h"
- #include <stdio.h>
- JNIEXPORT void JNICALL Java_com_magc_jni_HelloWorld_DisplayHello
- (JNIEnv *env, jobject obj)
- {
- printf("From jni_helloworldImpl.cpp :");
- printf("Hello world ! \n");
- return;
- }
此C++文件实现了上述头文件中的函数,注意方法函数名要保持一致。
编译生成动态库libHello.so,
命令:g++ -shared -I /usr/lib/jvm/java-6-openjdk/include jni_helloworldImpl.cpp -o libHello.so
成功后,便会在当前目录下生成动态链接库libHello.so文件。
有了具体实现的动态库后,就可以运行JAVA调用JNI程序类的native方法了,
命令:java -Djava.library.path=. com.magc.jni.HelloWorld
输入结果即为:From jni_helloworldImpl.cpp :Hello world !
原文链接:http://www.cnblogs.com/mandroid/archive/2011/06/15/2081093.html
发表评论
-
ISO-8859_1统一编码 java
2011-08-19 11:07 2031Java中文问题一直困扰着很多初学者,如果了解了Java系统的 ... -
UTF-8 GBK UTF8 GB2312
2011-08-19 10:46 1927UTF-8:Unicode TransformationFor ... -
Properties 类读取配置文件
2011-08-17 22:37 14631、使用java.util.Properties类的load( ... -
Java编程之四大名著
2011-08-06 10:07 1460中文第四版 http://download.csdn.n ... -
JDK5.0 新特性
2011-07-28 20:02 13901.AutoBoxing 原来int是非 ... -
JDK6的新特性
2011-07-28 19:57 1786JDK6的新特性 JDK6的新特性之一_Desktop类和Sy ... -
线程同步
2011-07-25 11:34 1278作者 : buaawhl http://www.iteye.c ... -
ZipInputStream类
2011-07-22 11:33 18772《Java开发实战经典》第12章Java IO,Java ... -
String、StringBuffer和StringBuilder的区别
2011-07-14 15:04 1370String是不可变的,StringBuffer是可变的;St ... -
精通JAVA核心技术
2011-07-11 11:31 1288http://www.2cto.com/ebook/20100 ... -
Java多线程sleep(),join(),interrupt(),wait(),notify()
2011-07-06 22:51 4913浅析 Java Thread.join() 一、在研究j ... -
FileInputStream/FileOutputStream的应用
2011-07-06 15:06 1411这是一对继承于InputStream和OutputStream ... -
面向对象和面向过程的区别
2011-07-04 09:52 1411面向过程就是分析出解 ... -
Java参数传值还是传引用
2011-07-03 20:52 3639参数是按值而不是按 ... -
JAVA排序汇总
2011-06-29 18:07 1494package com.softeem.jbs.lesson4 ... -
Java流操作,InputStream、OutputStream及子类FileInputStream、FileOutputStream;BufferedInpu
2011-06-27 18:09 19255Java将数据于目的地及来 ... -
线程综合文章
2011-06-27 10:48 1116http://lavasoft.blog.51cto.com/ ... -
由Java中的Set,List,Map引出的排序技巧
2011-06-24 14:18 2377一。关于概念: ... -
Date、String、Timestamp之间的转换
2011-03-20 16:59 2419public static Timestamp pars ... -
ToStringBuilder和ToStringStyle
2011-03-09 17:55 1767看完了ReflectionToStringBuilder后,发 ...
相关推荐
JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与平台无关这一重大优点的不足,在JAVA实现跨平台的同时,也能与其它语言(如C、C++)的动态库进行交互,给其它语言发挥优势的机会。 有了JAVA标准平台的支持...
《Java本地接口(JNI)编程指南和规范》是一本专为开发者设计的技术手册,它深入介绍了Java本地接口(JNI)的核心概念、设计原理以及使用方法。本书的目标读者主要包括: - 希望集成使用C或C++等传统语言编写的代码...
Java通过JNI调用C# DLL是一个跨平台、跨语言的技术实践,主要应用于需要利用Java的稳定性和C#的高性能...通过学习和实践这个工程,开发者可以进一步提升跨语言编程的能力,更好地理解和掌握JNI以及P/Invoke的工作原理。
要深入理解JNI的实现原理,本书《JNI实现原理权威指南》无疑是提供了一个全面的技术指导和规范说明。 ### 知识点一:JNI的概念及其重要性 JNI是Java平台标准版的一部分,它为Java代码和本地应用程序接口(API)...
其次,`JAVA基础之理解JNI原理`这篇博客可能会深入解析JNI的工作原理,包括JNI头文件的生成、JNI函数的声明和实现,以及如何在Java类中声明本地方法并调用。理解JNI原理对于编写高效且无错误的跨语言调用至关重要。 ...
通过本文的详细介绍,你应该能够理解JNI的工作原理、使用场景和基本使用方法。JNI是一个强大的工具,但也需要谨慎使用,以避免常见的陷阱和性能问题。随着Java平台的发展,JNI仍然是连接Java与其他语言的重要桥梁。
本资源提供的“java jni简单实例”是一个实际应用JNI的示例,有助于学习和理解JNI的工作原理。 首先,我们来看JNI的核心概念: 1. **本地方法接口**:JNI定义了一套接口,使得Java代码能够声明本地方法(即非Java...
虽然理论上可以将JNI任务分为Java编程任务和C/C++编程任务,分别由不同的程序员完成,但要真正理解JNI的工作原理,还是需要熟悉这两种语言的代码。 通过本教程的学习,开发者将能够更好地利用JNI来扩展Java应用程序...
开发者需要理解JNI的原理,学习如何在C++中创建JNI函数,并在Java代码中适当地声明和调用这些函数。这个过程涉及到了Java和C++的混编,需要对两种语言都有一定的掌握。同时,正确配置工程文件和管理依赖关系也是成功...
首先,我们需要了解JNI的基本工作原理。JNI的核心是Java虚拟机(JVM)和本地方法接口。当Java代码调用本地方法时,JVM会通过JNI接口找到相应的本地代码,并执行该代码。在Delphi中,我们需要编写C或C++的动态链接库...
下面我们将深入探讨JNI的工作原理、使用步骤以及如何结合Java和C/C++代码。 1. **JNI简介** JNI是Java平台的一部分,它为Java应用程序提供了一种方式来调用本地方法(即非Java代码)。这些本地方法可以是C、C++...
这是一项技术性很强的任务,需要对C++编程、Java虚拟机的工作原理以及JNI接口有深入的理解。 首先,Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行Java字节码。C++创建JVM的过程主要分为以下几步: 1. **...
这篇教程旨在帮助开发者深入理解JNI的工作原理,并掌握实际开发中的应用技巧。 首先,JNI的核心概念包括Java虚拟机(JVM)、本地方法接口(Native Method Interface)和本地方法库。JVM是Java程序运行的载体,它...
通过这个“JNI全攻略.pdf”文档,读者将能够深入理解JNI的工作原理,学会如何创建和使用本地方法,以及如何有效地在Java和本地代码之间进行通信。这份指南涵盖了JNI的基础知识,适合初学者快速入门,同时对于有经验...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行...理解JNI的工作原理和API,以及如何在C++中安全地操作Java对象和方法,对于开发跨语言的系统或高性能应用至关重要。
本实例提供了一个使用JNI调用C++ DLL(动态链接库)的示例,对于学习和理解JNI的工作原理及其应用非常有帮助。 首先,我们来了解JNI的基本概念。JNI包含了一组头文件和库,它们定义了Java虚拟机(JVM)与本地代码...
通过本文介绍的步骤,读者不仅能够理解JNI的基本原理,还能实际动手构建一个简单的JNI程序,为进一步探索和应用打下坚实的基础。随着对JNI的深入了解,开发者可以将其应用于更复杂的项目中,实现Java与本地代码的...
这个DEMO对于理解JNI的工作原理和实践,以及Java如何与C/C++库集成,特别是与LevelDB这样的数据库系统交互,具有很好的学习价值。开发者可以通过分析和修改这个DEMO,来适应自己的需求,比如使用不同的数据库或者...
首先,我们需要理解JNI的工作原理。JNI提供了一种方式,让Java虚拟机(JVM)能够调用本地方法,这些方法可以是C、C++或者其他本地语言编写的。JNI包括一系列的头文件和库,开发者需要编写Java代码和C/C++代码两部分...
为了帮助开发者更好地理解JNI的原理和实现细节,本书包含了丰富的技术讨论和有效使用JNI的实用提示。这些内容基于Sun Microsystems工程师和社区开发者在 JNI 发布初期的两年经验积累。书中还详细介绍了JNI各种特性的...