Prompt.java
public class Prompt {
static {
System.loadLibrary("Prompt");
}
public static void main(String[] args) {
Prompt p = new Prompt();
String input = p.getLine("Type a line: ");
System.out.println("User typed: " + input);
}
private native String getLine(String prompt);
}
Prompt.c
#include <jni.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: Prompt
* Method: getLine
* Signature: (Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_Prompt_getLine(JNIEnv * env, jobject obj, jstring str) {
}
#ifdef __cplusplus
}
#endif
解说
- 原生函数总是比Java中声明的方法多两个参数。
- 第一个参数:
JNIEnv *
类型,是 JNIEnv 接口指针,指向一个地址,该地址包含了指向函数表的指针。
- 第二个参数:根据原生函数是否是 静态函数 而有所不同。
- 如果该原生函数不是 静态函数 ,则是
jobject
,对应着调用该原生函数的 Java 对象,有点像 C++ 中的this
指针。
- 如果该原生函数是 静态函数 ,则是
jclass
,对应着调用该原生函数的 Java 类。
类型映射
-
boolean
- jboolean
-
char
- jchar
-
short
- jshort
-
int
- jint
-
long
- jlong
-
float
- jfloat
-
double
- jdouble
其他