Ubuntu 使用Jni开发实例详解
1.编写Java文件,在其中声明native方法,并通过static语句块加载动态链接库,示例Prompt.java代码如下:
classPrompt{
privatenativeStringgetLine(Stringprompt);
publicstaticvoidmain(Stringargs[]){
Promptp=newPrompt();
Stringinput=p.getLine("Typealine:");
System.out.println("Usertyped:"+input);
}
static{
System.loadLibrary("Prompt");
}
}
2.调用javac命令生成Prompt.class文件;
javacPrompt.java
3.调用javah命令生成Prompt.h头文件供C程序引用:
javah-jniPrompt
自动生成的头文件如下:
/*DONOTEDITTHISFILE-itismachinegenerated*/
#include<jni.h>
/*HeaderforclassPrompt*/
#ifndef_Included_Prompt
#define_Included_Prompt
#ifdef__cplusplus
extern"C"{
#endif
/*
*Class:Prompt
*Method:getLine
*Signature:(Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORTjstringJNICALLJava_Prompt_getLine
(JNIEnv*,jobject,jstring);
#ifdef__cplusplus
}
#endif
#endif
4.编写Prompt.c文件实现具体功能:
#include<jni.h>
#include<stdio.h>
#include"Prompt.h"
JNIEXPORTvoidJNICALL
Java_Prompt_getLine(JNIEnv*env,jobjectobj,jstringprompt)
{
charbuf[128];
constjbyte*str;
str=(*env)->GetStringUTFChars(env,prompt,NULL);
if(str==NULL){
returnNULL;
}
printf("%s",str);
(*env)->ReleaseStringUTFChars(env,prompt,str);
scanf("%s",buf);
return(*env)->NewStringUTF(env,buf);
}
5.编译动态库libPrompt.so;
gcc-shared-fpic-I/usr/lib/jvm/java-6-sun-1.6.0.26/include-I/usr/lib/jvm/java-6-sun-1.6.0.26/include/linuxPrompt.c-olibPrompt.so
6.运行。
javaPrompt
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!