简单的使用jni调用java方法
来源:互联网 发布:网络服务商有哪些 编辑:程序博客网 时间:2024/05/22 11:36
简单的使用jni调用java方法
2013-06-04 10:20 10575人阅读 评论(0)收藏举报
本文章已收录于:
分类:
作者同类文章X
版权声明:本文为博主原创文章,未经博主允许不得转载。
jni中调用java方法分几步。先使用FindClass方法获取指定类class,在使用GetStaticMethodID方法或者GetMethodID获取静态和非静态的方法id。在使用CallObjectMethod或者CallStaticObjectMethod方法调用静态非静态方法,对于没有返回值的方法,函数为CallStaticVoidMethod形式。
- jobject zoomImage(JNIEnv* env, jobject jimgo, jint width, jint height, jint hints)
- {
- /* 声明局部变量 */
- jobject zoomimage;
- jmethodID jmgsi;
- jclass jimagec;
- /* 查找指定名称类 */
- jimagec = (*env)->FindClass(env, "java/awt/Image");
- /*
- 获取方法id
- (III)Ljava/awt/Image;为方法参数和返回值类型
- (III)表示此方法参数为int,int,int三个参数。返回值为Ljava/awt/Image
- */
- jmgsi = (*env)->GetMethodID(env, jimagec, "getScaledInstance", "(III)Ljava/awt/Image;");
- zoomimage = (*env)->CallObjectMethod(env, jimgo, jmgsi, width, height, hints);
- return zoomimage;
- }
- jobject getImage(JNIEnv* env, jbyteArray buf)
- {
- /* 声明局部变量 */
- jclass jcls;
- jmethodID jmid;
- jmethodID jcreateimage;
- jobject jtk;
- jobject jimgo;
- /*
- FindClass函数用于查找java类,参数为类的包名形式,不过.换成了/。
- java.awt.Toolkit 对应java/awt/Toolkit
- */
- jcls = (*env)->FindClass(env, "java/awt/Toolkit");
- if (jcls == NULL) {
- return NULL;
- }
- /*
- 查找静态方法id。
- 第二个参数为查找方法的类class,
- 第三个参数为查找方法名称,
- 第三个参数为方法参数和返回值类型。
- java中方法 public static Toolkit getDefaultToolkit()
- 对应的参数和方法类型为()Ljava/awt/Toolkit;
- ()表示此方法没有参数,Ljava/awt/Toolkit为返回值类型,记住前面的L和结尾;
- */
- jmid = (*env)->GetStaticMethodID(env, jcls, "getDefaultToolkit", "()Ljava/awt/Toolkit;");
- /*
- 调用静态方法,返回类型为Object。
- 参数分别为:指定方法的class和获取的方法id
- */
- jtk = (*env)->CallStaticObjectMethod(env, jcls, jmid);
- /*
- 获取非静态方法id
- 使用和静态一样,注意这里参数类型:([B)Ljava/awt/Image;
- ([B)表示此方法的参数类型为byte[]数组,具体参数对应类型可以查找sun的jni手册
- */
- jcreateimage = (*env)->GetMethodID(env, jcls, "createImage", "([B)Ljava/awt/Image;");
- /*
- 调用非静态方法,并返回Obiect对象,最后一个参数为可变参数,对应值为
- 方法的参数列表。
- */
- jimgo = (*env)->CallObjectMethod(env, jtk, jcreateimage, buf);
- /* 释放局部对象*/
- (*env)->DeleteLocalRef(env, jtk);
- return jimgo;
- }
- 顶
- 1
- 踩
- 0
- 上一篇简单的ListView使用
- 下一篇安卓平台使用sqlite
0 0
- 简单的使用jni调用java方法
- 简单的使用jni调用java方法
- 简单的使用jni调用java方法
- 简单的使用jni调用java方法
- java JNI本地方法调用的使用
- Android中简单的JNI使用,C++调用JAVA
- cocos2d-x中使用JNI的调用JAVA方法
- 使用jni实现在Java中调用C++的方法
- Java中使用JNI调用本地动态库的方法
- Java-----使用JNI调用本地方法
- Java使用JNI调用C/C++方法
- JNI调用Java方法
- JNI调用Java方法
- JNI调用Java方法
- JNI调用Java方法
- JNI调用Java方法
- JNI调用Java方法
- JNI: JAVA通过JNI调用另一个JAVA类的方法
- WebView的使用心得
- HDU 2190 悼念512汶川大地震遇难同胞——重建希望小学 (递推)
- swift学习-元组
- IOS -定位(一)
- JDBC - ResultSet
- 简单的使用jni调用java方法
- 两个对象之间的比较,实现接口IComparable
- 文本换行显示
- git-常用命令
- c++,对txt文件进行读取显示
- Programming Exercise 6:Support Vector Machines
- android使用c通过jni回调java
- 搭建Eclipse、Resin Web开发环境
- java 反射机制读取属性值