美文网首页
Java中JNI的使用详解第七篇:反射原理

Java中JNI的使用详解第七篇:反射原理

作者: Mr_Ray | 来源:发表于2017-02-26 21:40 被阅读0次

    第一步: 编写java

    public class HelloWorld{
    
        static {
            System.loadLibrary("native");
        }
        public native void callJavaFun(String str);
    
        public static void main(String[] args) {
            HelloWorld world=new HelloWorld();
            world.callJavaFun("say");
        }   
    
    
        public void say(){
            System.out.println("I AM CLASS");
        }
    }
        
    

    第二步: 编译、获取,更改JNI头文件名

    $ javac HelloWorld.java
    $ javah HelloWorld
    $ mv HelloWorld.h  HelloWorld.c
    

    第三步完成JNI文件的编写

    #include <jni.h>
    
    
    JNIEXPORT void JNICALL Java_HelloWorld_callJavaFun
      (JNIEnv * env, jobject pramjob, jstring jstr){
    
        const char *str;
        //获取字符串
        str=(*env)->GetStringUTFChars(env,jstr,NULL);
        if (str==NULL)
        {
            return ;
        }
    
        //通过字符串来调用函数
        jmethodID mid  = NULL;
        //获取Java Class
        jclass cls = (*env)->GetObjectClass(env,pramjob);
        //获取Java函数
        mid = (*env)->GetMethodID(env,cls,str,"()V");
        //调用函数  
        (*env)->CallVoidMethod(env,pramjob,mid);
      }
    
    

    第四步: 编译、设置程序共享库位置

    $ gcc HelloWorld.c -shared -fPIC -o libnative.so -I /usr/lib/jvm/java-7-openjdk-amd64/include/
    $ export LD_LIBRARY_PATH=.
    

    第五步: 执行、打印成功!

    I AM CLASS
    

    相关文章

      网友评论

          本文标题:Java中JNI的使用详解第七篇:反射原理

          本文链接:https://www.haomeiwen.com/subject/knomwttx.html