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)
说明: