jni调用c的话,c中不需要main()的。你把java方法生成c的头文件,就转换成了你在C下的格式,引用就可以了。给你个例子:
//java,DisplayMessage方法
public class DisplayMessage{
static{
System.loadLibrary("MessageHandler");
}
public static void main(String[] args){
printMessage();

        /*printMessage()是要用的自然方法*/
public static native void printMessage();
}命令javac -jni DisplayMessage.class
则生成头文件DisplayMessage.h,如下
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class DisplayMessage */#ifndef _Included_DisplayMessage
#define _Included_DisplayMessage
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     DisplayMessage
 * Method:    printMessage
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_DisplayMessage_printMessage
  (JNIEnv *, jclass);#ifdef __cplusplus
}
#endif
#endif你不要修改,但到中间的一句了吗?
——JNIEXPORT void JNICALL Java_DisplayMessage_printMessage
  (JNIEnv *, jclass);你拷下来粘到你要写得C程序中,只需要在()种的参数类型后给出变量名就可以,这就是jni要引用的C生成的库
#include <stdio.h>
#include "DisplayMessage.h"JNIEXPORT void JNICALL Java_DisplayMessage_printMessage
  (JNIEnv *env, jclass cl)
 {
  printf("Hello,Maggie!");
  }然后你就可以在Java下运行了,急得要指定库的路径

解决方案 »

  1.   

    JNIEXPORT void JNICALL Java_MyNative_showStrings0
      (JNIEnv *env, jclass cls, jobjectArray sa)
    {
      int len = (*env)->GetArrayLength( env, sa );
      int i=0;
      for( i=0; i < len; i++ )
      {
        jobject obj = (*env)->GetObjectArrayElement(env, sa, i);
        jstring str = (jstring)obj;
        const char* szStr = (*env)->GetStringUTFChars( env, str, 0 );
        printf( "%s ", szStr );
        (*env)->ReleaseStringUTFChars( env, str, szStr );
      }
      printf( "\n" );
    }
    char ** 不就是一个字符串数组么,就是这样传的,注意sa的用法就行了。