PLC
直播中

蒲泛粟

7年用户 954经验值
私信 关注

JNI中类的传递

怎样去创建JNI中要传递的类?从JNI中得到返回类的信息是什么?

回帖(1)

陈桂英

2021-9-30 17:17:58
JNI中类的传递
上面说了一大篇,正篇我们马上开始。
首先创建我们要传递的类
public class CProduct
{
public CProduct()
{
incod;
fnam;
price=0;
qty=0;
}
//商品编码 public String incode;
//商品名称 public String fname;
//价格 public float price;
//数量 public int qty;
}
从JNI中得到返回类的信息
我们在VaccaeJNI的类中加入一个静态方法getproduct;

//获取产品信息
public native static CProduct getproduct();
然后按ALT+ENTER让其在native-lib.cpp中自动生成对应的方法

生成返回类的步骤:
用FindClass获取到我们的CProduct类
用GetFieldID来定义类CProduct里面的属性信息
实例化我们的类
通过SetXXXXXField的方法全各个属性赋值
返回类信息
extern “C”
JNIEXPORT jobject JNICALL
Java_dem_vac_vaccaendk_VaccaeJNI_getproduct(JNIEnv *env, jclass type) {
//首先获取class
jclass jcls = env-》FindClass(“dem/vac/vaccaendk/CProduct”);
if (jcls == NULL) {
return 0;
}
//定义类里面的属性
jfieldID incode = env-》GetFieldID(jcls, “incode”, “Ljava/lang/String;”);
jfieldID fname = env-》GetFieldID(jcls, “fname”, “Ljava/lang/String;”);
jfieldID price = env-》GetFieldID(jcls, “price”, “F”);
jfieldID qty = env-》GetFieldID(jcls, “qty”, “I”);
//首先实例化类
jobject jobj = env-》AllocObject(jcls);
//然后对类中的各属性赋值
//商品编码
env-》SetObjectField(jobj, incode, env-》NewStringUTF(“000001”));
//商品名称
env-》SetObjectField(jobj, fname, env-》NewStringUTF(“康师傅方便面”));
//价格
env-》SetFloatField(jobj, price, 6.5);
//数量
env-》SetIntField(jobj, qty, 10);
//输出
return jobj;
}
然后我们在按钮事件里面写入调用的这个方法并显示出来

看一下运行效果
举报

更多回帖

发帖
×
20
完善资料,
赚取积分