JNI 初探

A. For linux  (IED netbeans)

    新建载入native lib类

package jni;
public class Hello
{
  static
  {
    try
    {
//此处即为本地方法所在链接库名
      System.load("libhello.so");
    }
    catch(UnsatisfiedLinkError e)
    {
      System.err.println( "Cannot load hello library:\n " +
                                e.toString() );
    }
  }
  public Hello()
  {
  }
//声明的本地方法
    public native void SayHello(String strName);
}

 

   创建主类//ToSay.java

package jni
public class ToSay {
public static void main(String args[]){
        Hello hw = new Hello();
        hw.SayHello("Christmas");   
    }
}
 

   根据native class创建*.cpp文件//Hello.cpp

#include "Hello.h"
#include <stdio.h>
//与Hello.h中函数声明相同
JNIEXPORT void JNICALL Java_Hello_SayHello (JNIEnv * env, jobject arg, jstring instring)
{
   //从instring字符串取得指向字符串UTF编码的指针
const jbyte *str = (const jbyte *)env->GetStringUTFChars( instring, JNI_FALSE );
    printf("Hello,%s\n",str);
  //通知虚拟机本地代码不再需要通过str访问Java字符串。
    env->ReleaseStringUTFChars( instring, (const char *)str);(若是在c语言中使用(*env)->)
    return;
}
 

关于路径的说明:(*****为文件名)

在有包的情况下: 

javac  package/*****.java 

javah  package.*****(此时生成的.h文件名是package_*****.h,所以.cpp文件载入的.h不同,生成的lib也不同)

export LD_LIBRARY_PATH=./ (lib与package放在一个路径)通知下面java 运行时候lib所在位置

java package.***** 

 

在netbeans中直接运行,载入native lib的设置方法:

项目右键==》属性==》运行==》工作目录,在其中添加native lib路径

 

参考:http://www.ibm.com/developerworks/cn/java/l-linux-jni/

 

B. For windows(netbeans+vs2008)

说明:

  1. 添加JDK,用于生成DLL的include的头文件方法。在vs2008中,工具==》选项==》项目和解决方案==》vc++目录==》显示一下内容的目录==》包含文件
  2. 在java中的用于载入nativelib的类中:使用System.loadLibrary(“nativelib");不要使用System.loadLibrary(“nativelib.dll");

 

 

 

 

 

你可能感兴趣的:(java,linux,jni,Netbeans,vc++)