DELPHI 开发JNI 之 JAVA 对象Integer应用

    技术2022-05-20  39

    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;

     

     

     


    最新回复(0)