java JNI

 JAVA JNI,中文含义是java本地调用接口。

说得通俗一点,就是在java程序中可以调用Windows api和c/c++程序。

范例:

在目录E:\kingbase\workspace_72\jni003\src下有两个文件:

TestAPI.java:

  
  
  
  
  1. public class TestAPI 
  2.     public static int max(int msg,int msg2) 
  3.     { 
  4.         return testshow0(msg,msg2); 
  5.     } 
  6.  
  7.     private static native int testshow0(int msg,int msg2); 
  8.  
  9.     static 
  10.     { 
  11.         System.loadLibrary("TestAPI"); 
  12.     } 
  13.  
  14.     public static void main(String[] args) 
  15.     { 
  16.         int a=max(3,5); 
  17.         System.out.println("return value :"+a); 
  18.     } 

TestAPI.c:

  
  
  
  
  1. #include   <windows.h>  
  2. #include   "TestAPI.h "  
  3. #include<stdio.h> 
  4. JNIEXPORT jint JNICALL Java_TestAPI_testshow0 
  5.   (JNIEnv *env, jclass obj, jint mesg, jint mesg2) 
  6.   { 
  7.   int i=mesg; 
  8.   int j=mesg2; 
  9.   int max=0; 
  10.   if(i>j){ 
  11.   max=i; 
  12.   }else
  13.   max=j; 
  14.   }; 
  15.   return max; 
  16.   } 

步骤1:运行javac TestAPI.java

步骤2:运行javah -jni TestAPI,生成TestAPI.h(TestAPI.h是机器生成的)

内容:

  
  
  
  
  1. /* DO NOT EDIT THIS FILE - it is machine generated */ 
  2. #include <jni.h> 
  3. /* Header for class TestAPI */ 
  4.  
  5. #ifndef _Included_TestAPI 
  6. #define _Included_TestAPI 
  7. #ifdef __cplusplus 
  8. extern "C" { 
  9. #endif 
  10. /* 
  11.  * Class:     TestAPI 
  12.  * Method:    testshow0 
  13.  * Signature: (II)I 
  14.  */ 
  15. JNIEXPORT jint JNICALL Java_TestAPI_testshow0 
  16.   (JNIEnv *, jclass, jint, jint); 
  17.  
  18. #ifdef __cplusplus 
  19. #endif 
  20. #endif 

禁止修改TestAPI.h 中的内容。

步骤3:cl   -I "C:\Program Files\Java\jdk1.6.0_27\include"   -I "C:\Program Files\Java\jdk1.6.0_27\include\win32"   -LD   TestAPI.c   user32.lib

步骤4:运行java TestAPI

注意:TestAPI.c 和TestAPI.h 是一一对应的,即TestAPI.c 要实现TestAPI.h 中声明的方法。

你可能感兴趣的:(java,jni,职场,休闲,本地调用)