JNI调用与常规Java调用交错-执行顺序是什么? 我最近一直在尝试JNI,以便移植一些现有的C++库。

JNI调用与常规Java调用交错-执行顺序是什么? 我最近一直在尝试JNI,以便移植一些现有的C++库。,java,java-native-interface,Java,Java Native Interface,作为测试的一部分,我创建了一个简单的“helloworld”程序。我在C++中调用一个简单的本地函数,它只打印消息。我对我在执行程序时观察到的一些行为有点好奇——似乎所有本机函数消息/响应都是在JavaSystem.out.print之后打印出来的。这是因为本机调用是在Java调用之后执行的,还是我应该忽略这个行为 public static void main(String[] args) { HelloWorld app = new HelloWorld();

作为测试的一部分,我创建了一个简单的“helloworld”程序。我在C++中调用一个简单的本地函数,它只打印消息。我对我在执行程序时观察到的一些行为有点好奇——似乎所有本机函数消息/响应都是在Java
System.out.print
之后打印出来的。这是因为本机调用是在Java调用之后执行的,还是我应该忽略这个行为

public static void main(String[] args) {
        HelloWorld app = new HelloWorld();
        System.out.println("say");
        app.print();

        System.out.println("what");
        app.print();
}
输出如下所示:

say
what
hola, world !
hola, world !
本机函数如下所示:

Java_HelloWorld_print(JNIEnv *env, jobject obj) {
    printf("hola, world !\n");
    return;
}
这是因为本机调用是在Java调用之后执行的吗

<>不,它几乎与输出如何在C++和java方面缓冲。
<调用的执行顺序与代码(java、C++、爪哇、C++)中的代码一样。

在本地代码中打印后FFLUH有区别吗?您是指fflush(STDUT);??因为我试过了,结果也一样。谢谢抱歉,我更新了错误的本机方法。是的,使用fflush(stdout)会有所不同。谢谢