ShowMessage.java public class ShowMessage { private native void ShowMessage(String msg);
static { System.loadLibrary("MsgImpl"); }
public static void main(String[] args) { ShowMessage app = new ShowMessage(); app.ShowMessage("Generated With JNI"); } }[编辑] 编译ShowMessage.java javac ShowMessage.java [编辑] 生成头文件ShowMessage.h javah -jni ShowMessage 生成的头文件如下: /* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class ShowMessage */
2,system执行os的命令;
3,利用swig生成调用dll的接口文件(推荐使用)
public class ShowMessage
{
private native void ShowMessage(String msg);
static
{
System.loadLibrary("MsgImpl");
}
public static void main(String[] args)
{
ShowMessage app = new ShowMessage();
app.ShowMessage("Generated With JNI");
}
}[编辑] 编译ShowMessage.java
javac ShowMessage.java
[编辑] 生成头文件ShowMessage.h
javah -jni ShowMessage
生成的头文件如下: /* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class ShowMessage */
#ifndef _Included_ShowMessage
#define _Included_ShowMessage
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: ShowMessage
* Method: ShowMessage
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_ShowMessage_ShowMessage
(JNIEnv *, jobject, jstring);
#ifdef __cplusplus
}
#endif
#endif[编辑] ShowMessage.cpp
#include <jni.h>
#include <stdio.h>
#include "ShowMessage.h"
extern "C" JNIEXPORT void JNICALL
Java_ShowMessage_ShowMessage(JNIEnv* env,
jobject, jstring jMsg)
{
const char* msg = env->GetStringUTFChars(jMsg,0);
print("JNI:%s\n", msg);
env->ReleaseStringUTFChars(jMsg, msg);
}[编辑] 生成ShowMessage.dll
vc编译方法如下: cl -I %JAVA_HOME%\include -I %JAVA_HOME%\include\win32 -LD ShowMessage.cpp -FeMsgImpl.dll
[编辑] 运行ShowMessage
java ShowMessage
or java ShowMessage -D java.library.path=[dll存放路径]
[编辑] 运行结果
JNI:Generated with JNI