您的位置:首页 > 编程语言 > Java开发

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端的代码如下:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐