使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World
来源:互联网 发布:程序员都容易猝死吗 编辑:程序博客网 时间:2024/05/16 07:17
JNI技术简介
JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他编程语言,只要调用约定受支持就可以了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但是,有些情况下这样做是可以接受的,甚至是必须的。例如,使用一些旧的库,与硬件、操作系统进行交互,或者为了提高程序的性能。JNI标准至少要保证本地代码能工作在任何Java 虚拟机环境下。
例子:使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World
任务
使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World
工具
UEStudio 15,JDK1.7(32bit),VC6.0
步骤
1.使用UEStudio创建TestJNI.java,并编写以下代码:
package com.kang;public class TestJNI{ public native void sayHello();//native代表本地代码(即C/C++代码) public static void main(String[] args) {//此处代码后续补入 }}
2.在cmd中切换到TestJNI.java所在目录,并输入:
javac -d . TestJNI.javajavah com.kang.TestJNI
此时会生成一个com文件夹和一个com_kang_TestJNI.h文件。说明成功。
3.打开VC6.0创建一个win32 dll的空工程,并新建一个名字为com_kang_TestJNI.h的头文件添加到该工程中。将TestJNI.java目录下的com_kang_TestJNI.h用记事本打开,拷贝其中的内容粘贴到VC6.0的com_kang_TestJNI.h文件中,并做如下修改:
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>//将此处的尖括号改成””,这是由于jni.h不是VC6.0系统自带的头文件,这需要从外部引进/* Header for class com_kang_TestJNI */#ifndef _Included_com_kang_TestJNI#define _Included_com_kang_TestJNI#ifdef __cplusplusextern "C" {#endif/* * Class: com_kang_TestJNI * Method: sayHello * Signature: ()V */JNIEXPORT void JNICALL Java_com_kang_TestJNI_sayHello (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
4.此时将需要的头文件(分别是jni.h和jni_md.h,位于Java的安装路径%JAVA_HOME%/include/和%JAVA_HOME%/include/win32)添加到VC6.0的工程目录下面。然后在VC6.0中新建一个源文件source.cpp,并添加进入如下代码:
#include "com_kang_TestJNI.h"#include <stdio.h>//此处的代码要参考com_kang_TestJNI.h,要和com_kang_TestJNI.h中声明的函数一致。JNIEXPORT void JNICALL Java_com_kang_TestJNI_sayHello(JNIEnv * env, jobject obj){ printf("Hello World!\n");}
然后编译。在工程路径中可以查看到有TestJNI.dll生成。这说明已经搞定。
5.配置环境变量:在计算机右键->属性->高级系统设置->环境变量,更改path,在原有的路径前面添加TestJNI.dll的绝对路径用分号与后面的路径分隔。在回到UEStudio中继续编辑TestJNI.java,在主函数中添加如下代码:
System.loadLibrary("TestJNI");//此处的TestJNI是刚刚在VC6.0中得到的动态链接库的名字TestJNI.dll,注意:不能带上.dll,否则系统会找不到这个动态链接库。 TestJNI tj = new TestJNI(); tj.sayHello();
6.重新打开一个cmd,切换到TestJNI.java的路径下,输入如下命令:
javac -d . TestJNI.javajava com.kang.TestJNI
会在控制台中输出Hello World!。表明已经完成。
- 使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World
- java jni实现hello world
- Java 调用C语言JNI库(Hello World实例)
- JNI:Java调用C函数打印hello,world
- Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能
- 使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能
- jni 中“hello world”程序的实现
- Android JNI编程(八)——体验AS2.2.2编写Jni程序、Java调C、C调Java函数、将C代码中的Log打印至Logcat
- Java应用中通过JNI嵌入c或者汇编代码来抓取qtrace的步骤
- c程序中不使用分号输出"Hello, world"
- 使用JNI技术实现Java和C/C++互调(Java调C/C++)
- Java使用JNI与C/C++代码实现混合编程
- 使用JNI在C中调用java代码
- 使用JNI在java中调用C代码
- Android NDK混合使用java和C/C++代码--Hello JNI
- jni实现C语言调用Java程序
- 使用JNI技术实现Java和C/C++互调(C/C++调Java)
- 使用JNI,让java调用c代码
- Linux Is Not Matrix——Jenkins的安装和启动
- python入门(4)
- 面试之C++题目汇总5
- 由一个div创造出的loading效果
- 选AMD K8的CPU,你注意内存的搭配了吗?
- 使用Java中的JNI技术将C/C++程序嵌入到Java代码中实现Hello World
- 面试之C++题目汇总6
- 在Java中如何实现“Pless presss any key to continue.”
- C#将图片嵌入网页之中
- jq UI插件
- Java XML解析
- iOS Swift百度地图 添加多个标注
- 通过修改Themed的相关属性,创造出绚丽的Activity切换效果
- 面试之C++题目汇总7