JNI本机函数v / s java函数调用序列

时间:2014-03-15 10:23:08

标签: java java-native-interface

我正在尝试在java类中创建JNI函数以及同一类中的java函数。

以下是创建的三个文件的代码

1)包含java函数的类:

package org.jnp.pkg001;

public class HelloNative {
    static {
        System.loadLibrary("lib/HelloNativeLib");
    }
    public native void cprintLineOne ();
    public native void cprintLineTwo ();

    public void jprintLineOne ()
    {
        System.out.println("Hi, I am in Java First Function");
    }

    public void jprintLineTwo ()
    {
        System.out.println("Hi, I am in Java Second Function");
    }
}

2)原生函数实现:

#include "org_jnp_pkg001_HelloNative.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_org_jnp_pkg001_HelloNative_cprintLineOne
  (JNIEnv *, jobject)
{
    printf("Hi, I am in C First Function\n");
}

JNIEXPORT void JNICALL Java_org_jnp_pkg001_HelloNative_cprintLineTwo
  (JNIEnv *, jobject)
{
    printf("Hi, I am in C Second Function\n");
}

3)包含主要

的Java类
package test.jnp.pkg001;

import org.jnp.pkg001.HelloNative;

public class HelloNativeTest {

    public static void main(String[] args) {

        HelloNative hn= new HelloNative();
        hn.cprintLineOne();
        hn.jprintLineOne(); 
        hn.cprintLineTwo();
        hn.jprintLineTwo();

    }

}

我得到如下输出,这与调用函数的顺序不匹配

Hi, I am in Java First Function
Hi, I am in Java Second Function
Hi, I am in C First Function
Hi, I am in C Second Function

有谁能告诉我为什么这个序列与函数调用序列不匹配?并提出一个解决方案。

0 个答案:

没有答案