DELPHI 开发JNI 之 JAVA 对象Integer应用
前言:
DELPHI 的教程很多,在这里不加赘述,着重介绍JAVA里的常用对象的调用,
公司有这方面的功能需求,用了2天的时间研究了下JNI相关的东西.把我在研究过程中比较挠头的一些问题的解决方法发上来. 主要介绍 JAVA中常用对象的在开发JNI时候的应用.
Integer 方法应用
在JAVA中 Integer 和 int 是不一样的. 所以 JNI 中 调用JAVA 的方法的时候要注意下. 如果是 INT 类型的 GetMethodID 的时候 可以直接用 “I” 来表示. 如果是 INTEGER 就需要用 java/lang/Integer 而且在传入 integer 类型的参数需要初始化一个Integer 的JAVA对象作为参数传入
例子:
一个TREEMAP对象, 在JAVA里 定义为MAP<Integer,String> ,调用 TREEMAP对象的PUT 方法 PUT 到 MAP里 一个 INTEGER 和 STRING 类型的数据
Var
JVM: TJNIEnv;
bmMAPClass :JClass;
bmMAPmid :JMethodID;
bmMAPOBJ : jObject;
JFVS : jString ;
JIntClass : JClass;
JIntmid : JMethodID;
JIntObj : jObject;
javaargs : array[0..0] of JValue; //调用方法时的参数
JFVI : integer
Begin
//jvm 初始化
//调用Integer(int value)构造函数初始化INTEGER 对象
JFVI := 1;
JFVS := ‘TestString’;
JIntClass := JVM.FindClass('java/lang/Integer');
JIntmid := JVM.GetMethodID(JIntClass,'<init>','(I)V');
javaargs[0].i := JFVI;
JIntObj := JVM.NewObjecta(JIntClass,JIntmid,@javaargs);
{用javaargs参数使用 NewObjecta 方法 来建立对象尝试了很多次就这个好用}
//MAP 的操作
//bmMAPClass:= JVM.FindClass('java/util/TreeMap');
//bmMAPOBJ初始化
bmMAPmid := JVM.GetMethodID(bmMAPSubClass,'put','(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;'); //获得PUT 方法的METHODID
JVM.CallNonvirtualObjectMethod(bmMAPSubOBJ,bmMAPSubClass,bmMAPSubmid,[JIntObj, JFVS]); //调用PUT方法
end;