我最近一直在试验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;
}
答案 0 :(得分:3)
这是因为在Java调用
之后执行本机调用
不,它几乎肯定与输出在C ++和Java端缓冲的方式有关。
调用的执行顺序与您的代码(Java,C ++,Java,C ++)中的执行顺序完全相同。