- 浏览: 278362 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (75)
- Extjs (9)
- Java (27)
- 幽默人生 (2)
- IT新闻 (0)
- Extjs4 (5)
- DB2 (1)
- JQuery (3)
- Myeclipse (2)
- Android (3)
- JSON (2)
- Perl (1)
- Javascript json (1)
- Sping (3)
- Struts2 (2)
- HTML (3)
- SQL (1)
- Spring (2)
- Flash builder4.5 (0)
- Hibernate (2)
- Javascript FusionCharts (0)
- FusionCharts (1)
- Javascript (2)
- CSS (1)
- 刷机 (1)
- 数据库 (3)
- 测试 (1)
- Java解惑 (1)
- Oracle (1)
- Ubuntu (3)
- JDK7 (1)
- eclipse (1)
- tomcat (1)
- gis (0)
- arcgis (1)
最新评论
-
hshyy2005:
赞赞赞!!!
Could not load the Tomcat server configuration at /Servers/Tomcat v7.0 Server at -
Butterfeild:
有效果!但是颜色貌似改不了
Extjs中Ext.grid.GridPanel stripeRows斑马纹 没效果 失效 解决办法 -
lliiqiang:
用户不是程序员,行为要被强制引导.
Web安全 -
lliiqiang:
动态的东西不容易分析,服务器动态容易被攻击漏洞。动态处理仅仅是 ...
Web安全 -
jingyemingyue:
砺雪凝霜 写道 没用啊那你可以试试Aptana这个软件,他也有 ...
spket对Extjs4的支持方法 eclipse插件spket安装 extjs4 提示
java的native使用方法
- 博客分类:
- Java
使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的,比如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少保证本地代码能工作在任何Java 虚拟机实现下。
------------------------------------------------------------------
编写带有native声明的方法的java类
·使用javac命令编译所编写的java类
·使用javah -jni java类名生成扩展名为h的头文件
·使用C/C++实现本地方法
·将C/C++编写的文件生成动态连接库
·ok
1) 编写java程序:这里以HelloWorld为例。
代码1:
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
声明native方法:如果你想将一个方法做为一个本地方法的话,那么你就必须声明改方法为 native的,并且不能实现。其中方法的参数和返回值在后面讲述。 Load动态库:System.loadLibrary("hello");加载动态库(我们可以这样理解:我们的方法 displayHelloWorld()没有实现,但是我们在下面就直接使用了,所以必须在使用之前对它进行初始化)这里一般是以static块进行加载的。同时需要注意的是System.loadLibrary();的参数“hello”是动态库的名字。
2)编译
没有什么好说的了 javac HelloWorld.java
3)生成扩展名为h的头文件
javah -jni HelloWorld
头文件的内容:/* DO NOT EDIT THIS FILE - it is machine generated */
1. include
/* Header for class HelloWorld */
1. ifndef _Included_HelloWorld 2. define _Included_HelloWorld 3. ifdef __cplusplus
extern "C" {
1. endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
* /
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);
1. ifdef __cplusplus
}
1. endif 2. endif(这里我们可以这样理解:这个h文件相当于我们在java里面的接口,这里声明了一个 Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);方法,然后在我们的本地方法里面实现这个方法,也就是说我们在编写C/C++程序的时候所使用的方法名必须和这里的一致)。
4) 编写本地方法实现和由javah命令生成的头文件里面声明的方法名相同的方法。
代码2:
1 #include "jni.h" 2 #include "HelloWorld.h"
3 //#include other headers
4 JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
注意代码2中的第1行,需要将jni.h(该文件可以在%JAVA_HOME%/include文件夹下面找到)文件引入,因为在程序中的JNIEnv、 jobject等类型都是在该头文件中定义的;另外在第2行需要将HelloWorld.h头文件引入(我是这么理解的:相当于我们在编写java程序的时候,实现一个接口的话需要声明才可以,这里就是将HelloWorld.h头文件里面声明的方法加以实现。当然不一定是这样)。然后保存为 HelloWorldImp.c就ok了。
5)生成动态库
这里以在Windows中为例,需要生成dll文件。在保存HelloWorldImpl.c 文件夹下面,使用VC的编译器cl成。 cl(字母L的小写表示) -I(字母i的大写表示,与后面的路径之间没有空格)%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll 注意:生成的dll文件名在选项-Fe后面配置,这里是hello,因为在HelloWorld.java文件中我们loadLibary的时候使用的名字是hello。当然这里修改之后那里也需要修改。另外需要将-I%java_home%\include -I%java_home%\include\win32参数加上,因为在第四步里面编写本地方法的时候引入了jni.h文件。
6) 运行程序 java HelloWorld就ok.
发表评论
-
hibernate-------could not instantiate id generator
2012-09-27 11:24 6062今天用Hibernate操作Mssql20 ... -
两种单例模式比较
2012-05-18 14:18 1228第一种: public class Test { ... -
MyEclipse Update Progress Error现象
2012-05-17 15:31 1173设置 Window->Prefrences->Ge ... -
Java内存模式
2012-04-10 14:49 917http://blog.csdn.net/intlgj/art ... -
Java解惑II
2012-02-27 10:42 1078public class Test { ... -
java.sql.SQLException: Listener refused the connection with the following error:
2012-02-23 11:10 15159java.sql.SQLException: Listener ... -
logback中文手册
2012-02-16 10:34 2509Logback是由log4j创始人设计的又一个开源日志组件。l ... -
使用logback替换原有项目中的log4j
2012-02-07 11:04 1792据说logback性能比较高,故想替换以前项目中的log4j, ... -
在Java中使用无符号整型
2012-01-31 09:37 9734在项目要使用无符号整型,可以在项目中加入joou. ... -
Java学习笔记之序列化
2012-01-30 15:11 951用static或者transient ... -
Java性能分析工具
2012-01-30 10:27 1084分享三款Java性能分析工具: 1.JProfiler ... -
Java内存小解
2011-12-26 17:25 915java中堆和堆栈的区别 1.栈(stack)与堆(he ... -
EL表达式 三目运算符在不同版本Tomcat中的表现
2011-12-14 13:50 3708我在JSP页面中使用了EL表达 式${param. ... -
Java反射实现类似Hibernate的通用增删改查
2011-10-31 22:48 1452package com.zsw.util.service; ... -
map的三种遍历方法
2011-09-20 16:16 893集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方 ... -
Java文件下载的几种方式
2011-09-15 08:56 29833public HttpServletResponse dow ... -
Hibernate属性配置
2011-09-07 11:51 1256引用 Hibernate 配置属性 Hibern ... -
关于struts.enable.DynamicMethodInvocation = true
2011-09-05 10:26 2328关于struts.enable.DynamicMethodI ... -
Java创建Web监听
2011-08-31 15:31 1168Java提供一些Servlet监听器,用于监听一些重要事件的发 ... -
<s:action />参数及URLRewriter重写地址后被包含后的jsp中链接问题
2011-07-28 10:37 11341:<s:action />在使用时的参数说明&l ...
相关推荐
Java中native方法学习 系统调用
JNA java native access
Java Native Interface Specification release 1.1 pdf版
JNI(java native interface) 简体中文:do.chuan@gmail.com 翻译版 英文版:Addison.Wesley.Java.Native Interface 希望对大家有帮助...
JNI是Java Native Interface的缩写,Java Native Interface(JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用...
JNI Framework 4.1.0 version. Java Native Access
THIS book covers the Java™ Native Interface (JNI). It will be useful to you if you are interested in any of the following: • integrating a Java application with legacy code written in languages such...
这是本人学习java native过程中的一些程序,学习native的朋友们可以下载一下。
JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与...
jna 的jar包,JNA(Java Native Access )提供一组Java工具类用于在运行期间动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。
The definitive JNA reference (including an overview ...JNA provides Java programs easy access to native shared libraries without writing anything but Java code - no JNI or native code is required......
Java Native Interface 必看资料
这个资源我也不太清楚有什么具体内容,可能是Professional Java Native Interfaces with SWTJFace这本英文书的源码吧!希望对各位有用!
JNA(Java Native Access )提供一组Java工具类用于在运行期动态访问系统本地库(native library:如Window的dll)而不需要编写任何Native/JNI代码。开发人员只要在一个java接口中描述目标native library的函数与...
THIS book covers the Java™ Native Interface (JNI). It will be useful to you if you are interested in any of the following: • integrating a Java application with legacy code written in languages such...
首先,我们需要在Java类中声明一个native方法,并使用`native`关键字来修饰它。然后,我们需要使用`System.loadLibrary()`方法来加载本地库,这个库包含了本地方法的实现。最后,我们可以像调用普通的Java方法一样...
Java Native Interface Specification-JDK1.6,内有一些实例代码,
The Java Native Interface Programmer's Guide.pdf
与前面传的java 本地代码访问注册表是一个文件,操作时,忘了传C代码,补上。
Java本地接口指引与规范(JNI官方版本),带完整书签页。 文档包括3个部分: 1.Introduction and Tutorial(简介与教程); 2.Programmer`s Guide(程序员指南); 3.Specification(规范) 适用于JNI开发的开发人员使用。