JNI攻略―操作对象的构造方法
来源:互联网 发布:阿里 腾讯 视频云服务 编辑:程序博客网 时间:2024/06/09 08:39
本篇主要介绍如何在JNI中,构造一个java对象。通过本章的学习大家会发现构造java对象基本和调用java对象的方法一致。
一、 操作构造函数
下面是一个包含创建某个对象的本地方法。
public class ConstructorAccess{
public static native void callThread(); //创建java对象的本地方法
public static void main(String[] args){
ConstructorAccess.callThread(); //调用本地方法
}
}
class ThreadTest implements Runnable { //辅助的线程
int i = 0 ; //局部变量
public void run(){
try{
Thread.sleep(2000); //线程休息
}catch(Exception e){
System.out.println("Error !");
}
System.out.println("This is the "+(i++) + "th's sleep"); //打印线程休息的次数
}
}
下面就是包含构造某个线程对象的本地方法。
#include <jni.h>
JNIEXPORT void JNICALL Java_ConstructorAccess_callThread(JNIEnv *env, jclass cls){
jclass jcls , threadcls; //ThreadTest和Thread类的类
jmethodID mid , mid2 , startmid ;
//ThreadTest和Thread类的构造方法和Thread实例的开始方法
jobject obj , obj2 ; //ThreadTest和Thread类的实例
jcls = (*env)->FindClass(env, "ThreadTest"); //得到ThreadTest类的类
if (jcls == NULL) { return ; }
mid = (*env)->GetMethodID(env, jcls,"<init>", "()V"); //构造ThreadTest类
//在JNI中,构造器其实就是一个名称为"<init>"的方法
//返回值为void
if (mid == NULL) { return ; }
obj = (*env)->NewObject(env, jcls, mid, NULL); //创建该类的实例
threadcls = (*env)->FindClass(env, "Ljava/lang/Thread;"); ////得到Thread类的类
if (threadcls == NULL) { return ; }
mid2 = (*env)->GetMethodID(env, threadcls,"<init>", "(Ljava/lang/Runnable;)V");
//达到构造器的方法
if (mid2 == NULL) { return ; }
obj2 = (*env)->NewObject(env, threadcls, mid2, obj); //以刚才创建的ThreadTest对象
//为参数,使用Thread类的new Thread(Runnable r)创建类
startmid = (*env)->GetMethodID(env, threadcls,"start", "()V"); //得到线程类的启动方法
if (startmid == NULL) { return ; }
(*env)->CallVoidMethod(env, obj2, startmid); //调用start方法启动线程
(*env)->DeleteLocalRef(env, jcls); //释放资源
}
二、 总结
在上面我们分析了JNI如何操作java对象的属性、方法和构造方法!这些java对象可以是在JNI本地代码中创建的,也可以是通过JNI本地方法的参数传入的!传入的这么做啊!请仔细看看本地方法在.h文件中的表示,第二个参数就可以了!(明白了吧!不明白多看几遍哦!同时还要看Signature)。
这三篇我们讲述了在JNI中操作Java对象。下篇将讲述如何在JNI中处理异常。
- JNI攻略―操作对象的构造方法
- JNI学习之---用jni API 访问java对象的属性,方法,调用构造器。
- JNI全攻略之——操作Java对象的属性
- JNI攻略之四――JNI操作数组
- 用jni API 访问java对象的属性,方法,调用构造器
- Event()对象的构造方法
- 面向对象的构造方法:
- 对象数组的构造方法
- JNI学习(四)、本地方法创建java对象,以及对字符串的操作
- JNI对象操作
- JNI操作Java对象
- jni-jobject操作对象
- JNI传递对象的处理方法
- JNI传递对象的处理方法
- JNI传递对象的处理方法
- C++对象模型之默认构造函数的构造操作
- C++对象模型之复制构造函数的构造操作
- c++对象模型-默认构造函数的构造操作
- 【开源推荐】AllJoyn:打造全球物联网的通用开源框架
- tcpdump命令详解
- hadoop2.2+mahout0.9实战
- 提取器 unapply 与 unapplySeq
- opencv中Hought线变换
- JNI攻略―操作对象的构造方法
- Project Euler 16~20
- ProcessEngine cannot be resolved to a type
- WebView 笔记
- 事务并发控制和锁机制
- 2014-4-16-表格边框
- Oracle11g监听程序当前无法识别连接描述符中请求的服务
- 【甘道夫】Win7环境下Eclipse连接Hadoop2.2.0
- HDU 1041