- 浏览: 194452 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
find13:
学习
iReport中文教程 -
coderfly:
thanks !
iReport中文教程 -
月亮不懂夜的黑:
下载 学习。thanks!
iReport中文教程 -
yanqingluo:
谢谢,先转走.再验证.
eclipse maven debug -
周佳1986:
谢谢,分享。
iReport中文教程
JNI
的书写步骤
编写带有
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”
是动态库的名字。
main()
方法
2)
编译没有什么好说的了
javac HelloWorld.java
3)
生成扩展名为
h
的头文件
javah ?jni HelloWorld
头文件的内容:
/* DO NOT EDIT THIS FILE -
it is machine generated */
#include <jni.h
/* Header for class
HelloWorld */
#ifndef
_Included_HelloWorld
#define
_Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method:displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
(这里我们可以这样理解:这个
h
文件相当于我们在
java
里面的接口,这里声明了一个
Java_HelloWorld_displayHelloWorld (JNIEnv *, jobject);
方法,然后在我们的本地方法里面实现这个方法,也就是说我们在编写
C/C++
程序的时候所使用的方法名必须和这里的一致)。
4)
编写本地方法
实现和由
javah
命令生成的头文件里面声明的方法名相同的方法。
代码
2
:
1 #include <jni.h
2 #include
"HelloWorld.h"
3 #include <stdio.h
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
头文件里面声明的方法加以实现。当然不一定是这样)。然后保存
为
HelloWorldImpl.c
就
ok
了。
5)
生成动态库
这里以在
Windows
中为例,需要生成
dll
文件。在保存
HelloWorldImpl.c
文件夹下面,使用
VC
的编译器
cl
成。
cl -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
文件。
如果是linux下的话:
g++ -shared -I $JAVA_HOME/include -I $JAVA_HOME/include/linux -m32 -fPIC -o libHello.so HelloWorldImp
.c
6)
运行程序
java HelloWorld
就
ok
。
发表评论
-
spring事务管理的几种方式
2014-06-19 20:38 6686原文:http://sishuok.com/forum/bl ... -
【转】<maven权威指南>学习笔记
2013-06-06 12:32 1143一些常用的命令 mvn help:effective-pom ... -
ubuntu 下安装oracle客户端oracle-xe-client
2012-12-13 16:19 1686本文转自 http://os.chinaunix.net/a2 ... -
JVM监控工具介绍jstack, jconsole, jinfo, jmap, jdb, jstat
2012-12-11 23:46 5706本文转自:http://blog.csdn.net/ke ... -
【转】自动ssh登录的几种方法
2012-11-01 19:50 1089本文转自 http://blueicer.blog.51cto ... -
【转】ubuntu自动登录ssh
2012-11-01 19:47 1093本文转自 http://huqilong.b ... -
Linux下如何保持gnome-terminal窗口执行命令后停留而不立刻关闭(gnome-terminal -x)
2012-10-17 11:46 12059Linux下如何保持gnome-terminal窗口执行命令 ... -
java 分组
2012-07-24 13:04 943Map<String,List<SoRe ... -
Ajax 跨域代理
2012-05-23 14:56 1438使用了httpclient做代理请求。 import ... -
【转】Ubuntu10.04下安装oracle客户端 oracle-ex-client, 使用sqlplus
2012-04-27 11:55 1442本文来源于:http://329937021.iteye.co ... -
Ubuntu apt.conf 代理
2012-04-24 16:19 1765Acquire::http::Proxy "h ... -
svn st 状态详解
2012-04-03 14:32 31461svn st --help status (stat, st ... -
[转]整理关于JVM方面的知识点
2012-02-22 20:05 1048转自:http://furturestrategist.ite ... -
开发一些约定而非规定
2012-02-17 10:25 9151、equals:常量在前,变量在后 如:"&q ... -
Java Selenium【转】
2011-12-29 15:51 2972本文转自 http://www.automationqa.co ... -
Java虚拟机(JVM)中的内存设置详解 【转】
2011-11-28 23:28 964在一些规模稍大的应 ... -
Java虚拟机classloader
2011-11-27 12:27 0当JVM(Java虚拟机)启动时,会形成由三个类加载器组 ... -
JVM内存模型
2011-11-27 12:25 636JVM内存模型(详见附件) -
HTTP 协议简介
2011-11-27 12:17 1097HTTP 协议简介(详见附件) 超文本传输协议( ... -
Java Enum 多态
2011-11-27 12:13 1441Enum 多态,我没说错,不过Enum是不可以被继承的, ...
相关推荐
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下非常有用,比如当需要利用已有的C或C++库,或者提升性能时,我们可以通过JNI将Java代码与本地...
JNI,全称Java Native Interface,是Java平台标准的一部分,它为Java代码和其他语言写的代码提供了一个接口。在Java应用程序中,JNI允许Java代码调用本地(非Java)代码,反之亦然,使得开发者能够利用Java的跨平台...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必要的,比如调用操作系统本地库、加速性能关键的代码或者利用硬件特性等。本文将深入...
3. **JNI常量**:定义了一些预定义的常量,如`JNI_VERSION_1_1`, `JNI_VERSION_1_2`, `JNI_VERSION_1_4`, `JNI_VERSION_1_6`, `JNI_VERSION_1_8`等,用于表示JNI接口的版本。 4. **JNI环境变量**:`JNIEnv`结构体中...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下非常有用,比如当需要利用已有的C/C++库或者优化性能时。本篇文章将深入探讨如何在JNI中传递...
Android 通过 JNI 调用.so 动态库 Android 通过 JNI(Java Native Interface)调用.so 动态库是 Android 开发中的一种常用技术。JNI 是一种允许 Java 代码与 native 代码之间进行交互的接口。通过 JNI,我们可以在 ...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必要的,比如当需要利用已有的C/C++库,或者为了性能优化而需要直接调用硬件接口时。在这...
Java JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下被使用,比如优化性能、利用已有的C/C++库或者访问操作系统特定的功能。在这个"Java jni调用...
在Android开发中,Java Native Interface (JNI) 是一个关键的工具,它允许Java代码与本地C/C++代码交互。JNI的使用场景广泛,包括优化性能、利用硬件特性、调用已有的C/C++库等。当涉及到Android调用JNI并返回自定义...
在Android系统中,JNI(Java Native Interface)是一种技术,它允许Java代码和其他语言写的代码进行交互。本资源"I2CJNI.rar"似乎包含了一个实际应用的Android I2C通信示例,利用JNI来实现硬件级别的低层通信。I2C...
JNI(Java Native Interface)是Java平台提供的一种标准接口,它允许Java代码和其他语言写的代码进行交互。JNI在Android开发中尤为重要,特别是在需要调用C/C++原生代码以提升性能或者利用现有库时。本教程“JNI入门...
JNI(Java Native Interface)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在Android开发中,JNI常用于提升性能、调用系统库或者实现特定功能,如与C/C++库交互。本项目重点在于如何在JNI...
JNI层内存泄漏检测工具是针对Android应用开发中的一个重要问题——JNI内存泄漏的解决方案。JNI,全称为Java Native Interface,允许Java代码与其他编程语言(如C++)交互,从而利用其性能优势。然而,由于Java和C/...
上期技术的CTP接口的JNI封装: (1)网上也有一些实现,不过都挂羊头卖狗肉的,超级鄙视。 (2)testCTP是JAVA的Eclipse工程,执行CTPTest就可以调用起CTP的JNI接口,lib是testCTP工程依赖的jar包,熟悉JAVA的人导入这个...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。在Android开发中,JNI常被用来提高性能、调用系统底层库或实现特定功能,例如本例中的操作Java的list集合。在...
在Android系统中,Java Native Interface (JNI) 是一个关键组件,允许Java代码与其他语言(如C++或C)编写的代码进行交互。本项目聚焦于如何利用JNI来访问硬件资源,特别是控制LED设备。以下是对这个主题的详细阐述...
Java Native Interface(JNI)是Java平台的标准组成部分,它允许Java代码和其他语言写的代码进行交互。在JNI中,我们可以编写C/C++代码来扩展Java应用程序,实现一些Java无法直接完成的功能,比如访问操作系统底层...
在Android开发中,JNI(Java Native Interface)是一种技术,允许Java代码和其他语言写的代码进行交互。当需要执行一些性能敏感或者Java无法直接处理的任务时,开发者通常会利用JNI调用C/C++原生代码。本话题关注的...
JNI,全称Java Native Interface,是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都是必要的,比如调用操作系统本地库、加速性能关键的代码或者实现与硬件设备的直接通信。在...
JNI是Java平台的一部分,允许Java代码和其他语言写的代码进行交互。jni4net简化了这个过程,使得开发者无需深入理解复杂的JNI接口。 标签“jni4net”、“java”、“dll”、“C#”揭示了主要涉及的技术领域。jni4net...