私は最近、いくつかの既存のC ++ライブラリを移植するために、JNIを実験しています。
テストの一環として、単純な「helloworld」プログラムを作成しました。メッセージを出力するだけの単純なネイティブ関数をC++で呼び出しています。プログラムの実行中に観察したいくつかの動作について少し興味があります-すべてのネイティブ関数のメッセージ/応答はJavaSystem.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;
}