读书人

Ubuntu上使用Jni开发例子

发布时间: 2012-09-21 15:47:26 作者: rapoo

Ubuntu下使用Jni开发例子
1. 编写Java文件,在其中声明native方法, 并通过static 语句块加载动态链接库,示例Prompt.java代码如下:class Prompt {?? ?private native String getLine(String prompt);
?? ?public static void main(String args[]) {?? ? ? ?Prompt p = new Prompt();?? ? ? ?String input = p.getLine("Type a line: ");?? ? ? ?System.out.println("User typed: " + input);?? ?}
?? ?static {?? ? ? ?System.loadLibrary("Prompt");?? ?}}
2.调用javac命令生成Prompt.class文件;javac Prompt.java3.调用javah命令生成Prompt.h头文件供C程序引用:javah -jni Prompt自动生成的头文件如下:/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class Prompt */
#ifndef _Included_Prompt#define _Included_Prompt#ifdef __cplusplusextern "C" {#endif/*?* Class: ? ? Prompt?* Method: ? ?getLine?* Signature: (Ljava/lang/String;)Ljava/lang/String;?*/JNIEXPORT jstring JNICALL Java_Prompt_getLine??(JNIEnv *, jobject, jstring);
#ifdef __cplusplus}#endif#endif4.编写Prompt.c文件实现具体功能:#include <jni.h>#include <stdio.h>#include "Prompt.h"
JNIEXPORT void JNICALLJava_Prompt_getLine(JNIEnv *env, jobject obj, jstring prompt)?{?? ?char buf[128];?? ?const jbyte *str;?? ?str = (*env)->GetStringUTFChars(env, prompt, NULL);?? ?if(str == NULL) {?? ? ? ?return NULL; ? ? ? ??? ?}?? ?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/linux Prompt.c -o libPrompt.so6. 运行。java Prompt

读书人网 >编程

热点推荐