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
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!