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

JNI本机函数v/s java函数调用序列,java,java-native-interface,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 cp

我试图在一个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");
}
我得到的输出如下,与调用函数的顺序不匹配

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

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

它们被称为方法。。。您没有在C中刷新流,并且两者都打印到相同的TTY,我怀疑这就是问题所在。我怀疑您需要刷新C流。
printf()
没有
fflush(stdout)
,您需要在C代码中使用后者(因为
stdout
似乎是缓冲的)
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