JNI学习笔记(四)JNI中本地语言创建Java对象并且访问具体方法(附例子)
2012-08-02 09:33
851 查看
接上一篇(JNI学习笔记(三)JNI中本地语言访问Java类中的属性与方法)
下面学习JNI中本地语言创建Java对象并且访问具体方法
我们来查看jni.h头文件会发现其中有个如下方法:
jobject NewObject(jclass clazz, jmethodID methodID, ...) {
va_list args;
jobject result;
va_start(args, methodID);
result = functions->NewObjectV(this,clazz,methodID,args);
va_end(args);
return result;
}
这样我们可以通过本地代码来创建Java对象,下面我们来直接举个例子来演示一下(这个例子是使用本地代码来创建Java对象,并且使用本地代码来访问该Java对象中的方法)
(一):Java端的代码如下:
(二):本地代码的步骤
使用FindClass()来获取要创建的对象的jclass;
使用GetMethodID()获取构造函数;
使用NewObject()来创建对象
下面就要开始调用对象中的方法了,当然首先也要使用GetMethodID()获取方法
调用访问,使用Call<Type>Method()
看本地代码的例子的写法:
例子下载链接:http://download.csdn.net/detail/jiangqq781931404/4470549
下面学习JNI中本地语言创建Java对象并且访问具体方法
我们来查看jni.h头文件会发现其中有个如下方法:
jobject NewObject(jclass clazz, jmethodID methodID, ...) {
va_list args;
jobject result;
va_start(args, methodID);
result = functions->NewObjectV(this,clazz,methodID,args);
va_end(args);
return result;
}
这样我们可以通过本地代码来创建Java对象,下面我们来直接举个例子来演示一下(这个例子是使用本地代码来创建Java对象,并且使用本地代码来访问该Java对象中的方法)
(一):Java端的代码如下:
package com.jiangqq.jni; /** * 使用本地代码创建Java对象 * @author jiangqq * */ public class TestJni { public static native void outputMyTest(); public static void main(String[] args) { System.loadLibrary("nativeCode5"); outputMyTest(); } }
package com.jiangqq.util; /** * 新建MyTest类,在本地方法中进行初始化,并且调用类中的方法 * @author jiangqq * */ public class MyTest { public MyTest() { } /** * 使用本地语言调用,并且返回一个长整形的数 * @return temp */ public double printf(double temp) { return temp; } }
(二):本地代码的步骤
使用FindClass()来获取要创建的对象的jclass;
使用GetMethodID()获取构造函数;
使用NewObject()来创建对象
下面就要开始调用对象中的方法了,当然首先也要使用GetMethodID()获取方法
调用访问,使用Call<Type>Method()
看本地代码的例子的写法:
#include"com_jiangqq_jni_TestJni.h" #include<stdio.h> #include<iostream> using namespace std; JNIEXPORT void JNICALL Java_com_jiangqq_jni_TestJni_outputMyTest (JNIEnv * env, jclass jclazz) { //////////使用本地代码来创建Java对象,并且调用该对象中的具体方法/////////////// jclass clazz_myTest=env->FindClass("com/jiangqq/util/MyTest"); jmethodID jmethod_myTest=env->GetMethodID(clazz_myTest,"<init>","()V"); jobject jobject_myTest=env->NewObject(clazz_myTest,jmethod_myTest); jmethodID jmethod_printf=env->GetMethodID(clazz_myTest,"printf","(D)D"); jdouble j_temp=env->CallDoubleMethod(jobject_myTest,jmethod_printf,1234.0); printf("%.f\n",j_temp); }
例子下载链接:http://download.csdn.net/detail/jiangqq781931404/4470549
相关文章推荐
- JNI学习笔记(四)JNI中本地语言创建Java对象并且访问具体方法(附例子)
- JNI学习笔记:(1)开篇(2)本地代码访问Java代码 (3)本地方法取得Java属性/调用java方法 (4)本地代码创建Java对象(包括javaString) (5) 本地方法处理java数组
- JNI学习笔记4——本地代码创建Java对象(包括javaString)
- JNI学习笔记(三)JNI中本地语言访问Java类中的属性与方法(附例子)
- JNI学习笔记(三)JNI中本地语言访问Java类中的属性与方法(附例子)
- JNI学习笔记4——本地代码创建Java对象(包括javaString)
- JNI学习笔记2——本地代码访问Java代码
- JNI学习(三)、JNI本地方法访问Java端的属性和方法
- JNI学习笔记3——本地方法取得Java属性/调用java方法
- JNI学习笔记:C++代码访问Java类中的成员和方法
- JNI 学习笔记(二)-- JNI访问Java中各方法
- NDK开发学习笔记(2):JNI访问Java中的方法
- JNI学习之---用jni API 访问java对象的属性,方法,调用构造器。
- JNI学习笔记5——本地方法处理java数组/引用问题/缓存jfieldID/jmethodID
- JNI学习笔记 C++传递结构体、String、数组对象给JavaC++传递结构体、String、数组对象给Java
- Java中的static关键字解析(转自海子)__为什么main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。
- java个人学习笔记08(static+创建对象)
- JUC学习笔记--从阿里Java开发手册学习线程池的正确创建方法
- java学习笔记《java面向对象编程》——面向对象开发方法概述
- JAVA通过JNI调用本地C语言方法