public class JNITest {
static { System.loadLibrary("JNITest"); } // 加載 JNITest.dll / libJNITest.so
public native void showMessageBox(); // 本地方法聲明
public static void main(String[] args) {
new JNITest().showMessageBox();
}
}
編譯:javac JNITest.java → 生成 JNITest.class
命令:javah JNITest → 生成 JNITest.h
/* DO NOT EDIT - machine generated */
#include
#ifndef _Included_JNITest
#define _Included_JNITest
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_JNITest_showMessageBox(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
// JNITest.cpp
#include "JNITest.h"
#include
JNIEXPORT void JNICALL Java_JNITest_showMessageBox(JNIEnv *, jobject) {
::MessageBox(NULL, "This is a JNI test", "JNI", MB_OK);
}
VC6 命令:
cl -I"f:\jdk\include" -I"f:\jdk\include\win32" -LD JNITest.cpp user32.lib -FeJNITest.dll
-I:指定 JDK 頭文件路徑-LD:生成 DLLuser32.lib:鏈接 Windows API-Fe:指定輸出文件名命令:java JNITest → 彈出 Windows 消息框,JNI 調用成功。
Java_類全名_方法名(包名用下劃線分隔)JNIEnv*:JNI 環境指針,提供大量 Java 物件操作 APIjobject:調用對象實例(非靜態方法為 this,靜態方法為 Class 對象)