HelloWorld 善戰者,求之于勢,不責于人;故能擇人而任勢。

          知止而后有定,定而后能靜,靜而后能安,安而后能慮,慮而后能得。物有本末,事有終始。知所先后,則近道矣。

            BlogJava :: 首頁 ::  :: 聯系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 40 評論 :: 0 Trackbacks
          新建立ArrayHandler.java
          package com.user;
          public class ArrayHandler {
               private String arrayResults[];
               int arraySize = -1;
               public native void returnArray();
               static {
                   System.loadLibrary("nativelib");
               }
               public void sendArrayResults(String results[]) {
                   arraySize = results.length;
                   arrayResults = new String[arraySize];
                   System.arraycopy(results, 0, arrayResults, 0, arraySize);
               }
               public void displayArray() {
                   for (int i = 0; i < arraySize; i++) {
                       System.out.println("array element " + i + "= " + arrayResults
          );
                   }
               }
               public static void main(String args[]) {
                   String ar[];
                   ArrayHandler ah = new ArrayHandler();
                   ah.returnArray();
                   ah.displayArray();
               }
          }
             
          Windows
          ( 1 ).Javc ArarayHandler.java
          在當前目錄下建立com目錄,在com中建立user目錄,把ArrayHandler.class拷貝到user目錄下
          ( 2 )javah –jni com.user.ArrayHandler
          產生com_user_ArrayHander.h文件
          ( 3 )建立一個dll項目 nativelib
          新建一個com_user_ArrayHandler.cpp
          #include <jni.h>
          #include <iostream.h>
          #include "com_user_ArrayHandler.h"
          JNIEXPORT void JNICALL Java_com_user_ArrayHandler_returnArray
          (JNIEnv *env, jobject jobj){
          jobjectArray ret;      //定義一個數組類型的對象
          int i;
          jclass cls;
          jmethodID mid;
          char *message[5]= {"first", "second", "third",      "fourth", "fifth"};
          ret=(jobjectArray)env->NewObjectArray(5,
                env->FindClass("java/lang/String"),
                env->NewStringUTF(""));
          for(i=0;i<5;i++) {
              env->SetObjectArrayElement(ret,i,env->NewStringUTF(message
          ));
          }
          cls=env->GetObjectClass(jobj);//得到jobj類的對象
          //mid為ArrayHandler中的sendArrayResluts()方法
          mid=env->GetMethodID(cls, "sendArrayResults",      "([Ljava/lang/String;)V");
          if (mid == 0) {
              cout <<"Can't find method sendArrayResults";
              return;
          }    
          env->ExceptionClear();//清空異常信息
          env->CallVoidMethod(jobj, mid, ret);//調用方法sendArrayResluts()
          if(env->ExceptionOccurred()) {
              cout << "error occured copying array back" <<endl;
              env->ExceptionDescribe();
              env->ExceptionClear();
          }
          return;
          }
          我用的是Dev-c++
          建立一個dll項目,產生2個文件保存就可以了
          把項目的include路徑 增加 本地jdk的include 目錄和 include/win32路徑
          builder All
          產生nativelib.dll文件
          java com.user.ArrayHandler
          結果:
          array element 0= first
          array element 1= second
          array element 2= third
          array element 3= fourth
          array element 4= fifth
          Linux
          拷貝ArrayHandler.java; com_user_ArrayHandler.cpp到某個目錄下
          (1)      javac ArrayHandler.java
          (2)      mkdir com
          (3)      cd com
          (4)      mkdir user
          (5)      cd ..
          (6)      cd ..
          (7)      回到 ArrayHandler.java目錄
          (8)      cp ArrayHandler.class com/user/
          (9)      javah -classpath=. -jni com/user/ArrayHandler
          (10)      g++ -o libnativelib.so -shared -I$JAVAHOME/include -I$JAVAHOME/include/linux com_user_ArrayHandler.cpp
          (11)      java -Djava.library.path=. com/user/ArrayHandler
          (12)      結果同Windows


          </script>

          posted on 2007-08-13 18:50 helloworld2008 閱讀(318) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 嘉祥县| 天等县| 凯里市| 剑河县| 临猗县| 七台河市| 鄢陵县| 玉林市| 尚义县| 松原市| 沁源县| 阳原县| 屯昌县| 陈巴尔虎旗| 汨罗市| 友谊县| 兴城市| 加查县| 兴安盟| 古丈县| 五常市| 伊宁市| 漠河县| 临沧市| 英超| 济阳县| 通江县| 喀什市| 教育| 蚌埠市| 东阳市| 南安市| 光泽县| 长丰县| 西乌珠穆沁旗| 泸溪县| 嫩江县| 西青区| 雅安市| 金川县| 长宁区|