6

我最近一直在试验 JNI,以便移植一些现有的 C++ 库。

作为测试的一部分,我创建了一个简单的“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;
}
4

1 回答 1

3

这是因为本机调用是在 Java 调用之后执行的吗

不,它几乎肯定与输出在 C++ 和 Java 端的缓冲方式有关。

调用的执行顺序与您的代码中显示的完全相同(Java、C++、Java、C++)。

于 2012-04-28T06:57:24.163 回答