- 浏览: 9825 次
最新评论
JAVA可以通过JNI接口访问本地的动态连接库,从而扩展JAVA的功能。使用JAVA JNI接口主要包括以下步骤:
(1)编写JAVA代码,注明要访问的本地动态连接库和本地方法;
(2)编译JAVA代码得到.class文件;
(3)使用javah -jni 生成该类对应的C语言.h文件;
(4)使用C/C++实现(3)生成的.h文件中声明的各函数;
(5)编译C/C++实现代码生成动态连接库。
本文使用一个简单的helloWorld示例演示JNI的使用。
(1)编写JAVA代码
public class helloWorld
{
public native void SayHello(String name);
static
{
System.loadLibrary("examdll");
}
public static void main(String [] argv)
{
helloWorld hello = new helloWorld();
hello.SayHello("myName");
}
}
(2)编译JAVA代码
javac helloWorld.java
(3)生成实现函数头文件
javah -classpath . 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: SayHello
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_helloWorld_SayHello
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
(4)在VC中实现上述函数
#include "helloWorld.h"
#include <stdio.h>
#include <string.h>
void JNICALL Java_helloWorld_SayHello(JNIEnv * env, jobject obj, jstring str)
{
jboolean b = true;
char s[80];
memset(s, 0, sizeof(s));
strcpy_s(s ,(char*)env->GetStringUTFChars(str, &b));
printf("Hello, %s", s);
env->ReleaseStringUTFChars(str , NULL);
}
**** 这是JNI的关键:通过env我们可以使用JAVA提供的一组函数操作与转换函数传递的参数。
(5)编译VC项目得到动态连接库 examdll.dll。
(1)编写JAVA代码,注明要访问的本地动态连接库和本地方法;
(2)编译JAVA代码得到.class文件;
(3)使用javah -jni 生成该类对应的C语言.h文件;
(4)使用C/C++实现(3)生成的.h文件中声明的各函数;
(5)编译C/C++实现代码生成动态连接库。
本文使用一个简单的helloWorld示例演示JNI的使用。
(1)编写JAVA代码
public class helloWorld
{
public native void SayHello(String name);
static
{
System.loadLibrary("examdll");
}
public static void main(String [] argv)
{
helloWorld hello = new helloWorld();
hello.SayHello("myName");
}
}
(2)编译JAVA代码
javac helloWorld.java
(3)生成实现函数头文件
javah -classpath . 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: SayHello
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_helloWorld_SayHello
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif
(4)在VC中实现上述函数
#include "helloWorld.h"
#include <stdio.h>
#include <string.h>
void JNICALL Java_helloWorld_SayHello(JNIEnv * env, jobject obj, jstring str)
{
jboolean b = true;
char s[80];
memset(s, 0, sizeof(s));
strcpy_s(s ,(char*)env->GetStringUTFChars(str, &b));
printf("Hello, %s", s);
env->ReleaseStringUTFChars(str , NULL);
}
**** 这是JNI的关键:通过env我们可以使用JAVA提供的一组函数操作与转换函数传递的参数。
(5)编译VC项目得到动态连接库 examdll.dll。
发表评论
-
java SpringMVC
2014-01-21 17:02 0package com.cweb.system.commo ... -
JDBC 建立连接公共操作类(静态方式与单例方式)
2013-08-30 00:31 0package com.ighost.jdbc; im ... -
jdbc连接数据库(单例模式)
2013-08-30 00:30 0... -
【JDBC单例】和【C3P0连接池基本用法】的对比
2013-08-30 00:25 0最近需要从一张表中查询大量数据,做了如下实验: 平台: ... -
cglib与xstream结合构造webservice的xml格式的入参返参的动态生成
2013-08-30 00:20 0cglib与xstream结合构造webservice的xm ... -
JNI原理
2013-08-30 00:15 0NI是JAVA标准平台中的一个重要功能,它弥补了JAVA的与 ... -
java 与 FTP
2013-08-30 00:14 0import java.io.ByteArrayInputS ... -
JNI原理
2013-08-30 00:11 0NI是JAVA标准平台中的一个重要功能,它弥补了JAVA的 ... -
java 静态块 代码块 静态变量 实例变量 构造
2013-08-30 00:06 1064package job; public clas ... -
静态代码块、非静态代码块、构造函数的执行顺序
2013-08-30 00:04 800public class ExA { static ... -
java 连接 DB 总汇合
2013-08-30 00:02 7051、Oracle8/8i/9i数据库(thin模式) C ... -
JAVA 中的四种解析XML方式
2013-08-30 00:01 806解析XML XML现在已经成为一种通用的数据交换格式,平台的 ... -
JAVA 解析 XML 的 四种技术
2013-08-24 02:52 6931 解析XML XML现在已经成为一种通用的数据交换格 ... -
单例模式 和 线程安全
2013-08-20 21:51 834// 1.单例分两种: // ... -
java解析XML dom方式
2013-08-20 21:46 854/** * @param args ... -
servlet产生验证码
2013-08-20 21:42 625package com.mweb.user.servlet; ...
相关推荐
这个"ubuntu上面使用jni例子"的压缩包很可能是提供了一个在Ubuntu环境下开发和运行JNI程序的示例。 JNI的核心在于创建本地方法接口,这些接口允许Java代码调用C/C++编写的函数,反之亦然。下面我们将深入探讨在...
通过这个摄像头JNI例子,我们了解了如何声明和实现本地方法,以及如何在C/C++代码中处理摄像头数据。JNI提供了一种强大的方式,让Java应用能够充分利用底层平台的功能,同时保持代码的可移植性。学习和掌握JNI技术,...
在这个“jni例子——使用int数组”的示例中,我们将深入探讨如何在Java和C/C++之间传递和操作int数组。 1. **JNI基础知识**: - JNI接口提供了Java与本地代码(如C/C++)通信的桥梁,使得开发者可以在Java应用中...
这个压缩包“安卓串口Socket通讯USB驱动jni相关-Android中调用JNI例子.rar”似乎包含了一个示例项目,展示了如何在Android应用中使用JNI来实现串口、Socket通信以及USB驱动的交互。以下将详细介绍这些知识点。 1. *...
在这个"Android_JNI例子"中,我们将深入探讨如何在Android项目中运用JNI技术。 首先,我们需要了解JNI的基本概念。JNI是Java平台标准的一部分,提供了一组接口,让Java代码能够调用C/C++函数,同时也能让C/C++代码...
这个"JNI例子.zip"文件包含了一个关于如何在Android应用中使用JNI的教程。 首先,我们来看`JNITest`项目。这是一个展示如何在Java代码中声明并调用本地方法的示例。在Java中,本地方法是用`native`关键字标记的,但...
【Android平台的JNI例子】 JNI(Java Native Interface)是Java平台的一个重要组成部分,它允许Java代码和其他语言写的代码进行交互。在Android开发中,JNI常用于实现高性能的计算、调用本地库、与硬件设备直接通信...
这个"linux-java调用c语言编译的so动态库-jni例子-简单计算器"是一个典型的示例,展示了如何利用JNI来创建一个Java应用程序,该程序能够调用C编写的动态链接库(.so文件)进行计算操作。 JNI是Java平台的一部分,它...
这个"简单易懂基于Android的JNI例子程序.rar"压缩包提供了一个基础的示例,帮助初学者理解如何在Android应用中使用JNI来调用本地(C/C++)代码。以下是关于JNI在Android开发中的相关知识点的详细解释: 1. **JNI...
Java JNI例子-创建DLL、项目导入DLL、IDEA配置JNI、JNI调用DLL(该DLL同时依赖第三方DLL)
【Android应用源码串口通信JNI例子】是一个关于在Android平台上使用Java Native Interface (JNI)进行串口通信的示例项目。在这个项目中,开发者展示了如何利用C/C++原生代码来实现与硬件设备的串行通信,从而扩展...
一个jni例子,放到桌面直接编译就能跑,一个jni例子,放到桌面直接编译就能跑,一个jni例子,放到桌面直接编译就能跑,一个jni例子,放到桌面直接编译就能跑,一个jni例子,放到桌面直接编译就能跑,一个jni例子,放...
在这个"Android JNI例子"中,我们将深入探讨JNI的基本概念、工作原理以及如何在实际项目中运用。 首先,JNI是Java平台的标准部分,它为Java应用程序提供了与本地代码交互的能力。在Android系统中,JNI特别有用,...
ndk andriod jni 例子 简单 实用 亲自验证
本示例将详细介绍如何在Android Studio(Stuido)中创建并使用一个简单的JNI(HelloWorld)例子,包括生成本地方法库(so文件)以及在其他项目中调用。 1. **创建JNI项目** 首先,我们需要创建一个新的Android ...
在这个例子中,会生成一个`HelloJNI.h`文件。 ```bash javah -jni HelloJNI ``` 4. **编写本地代码**:打开生成的头文件,实现`sayHello`方法。你需要包含jni.h头文件,并实现方法体。创建一个名为`hello.c`的C...
通过这个简单的JNI例子,我们可以看到Java和本地代码之间的交互过程。JNI的使用可以大大扩展Java应用程序的功能,但也需要注意性能和安全问题,因为直接调用本地代码可能会绕过JVM的一些安全机制。 此外,JNI还支持...
在Android开发中,JNI(Java Native Interface)是...通过这个简单的例子,你了解了如何在Android应用中利用JNI调用C++代码。随着对JNI的深入理解,你可以在需要的地方充分利用C++的优势,提高应用性能或实现特定功能。
JNI(Java Native ...总结来说,JNI例子代码演示了如何通过JNI接口在本地方法中访问和操作Java对象的属性和方法。通过这个过程,开发者可以利用Java的高级特性以及本地代码的高效性,实现跨语言的代码协同工作。
jni开发的demo,实现了Java调用native和native调用Java的功能。详情见博客:http://blog.csdn.net/hello_chillax/article/details/50920766