Ich habe kürzlich mit JNI experimentiert, um einige existierende C++ - Bibliotheken zu portieren.JNI-Aufrufe verschachtelt mit regulären Java-Aufrufe - was ist die Reihenfolge der Ausführung?
Als Teil meiner Tests habe ich ein einfaches Helloworld-Programm erstellt. Ich rufe eine einfache native Funktion in C++ auf, die nur Nachrichten ausgibt. Ich bin etwas neugierig auf etwas Verhalten, das ich während der Ausführung des Programms beobachtet habe - es scheint, dass alle nativen Funktionsnachrichten/Antworten nach Java gedruckt werden. Liegt das daran, dass native Aufrufe nach Java-Aufrufen ausgeführt werden, oder soll ich dieses Verhalten einfach ignorieren?
public static void main(String[] args) {
HelloWorld app = new HelloWorld();
System.out.println("say");
app.print();
System.out.println("what");
app.print();
}
Die Ausgabe sieht wie folgt aus:
say
what
hola, world !
hola, world !
Die native Funktion ist wie folgt:
Java_HelloWorld_print(JNIEnv *env, jobject obj) {
printf("hola, world !\n");
return;
}
Macht fflush nach dem Drucken im nativen Code einen Unterschied? –
meinst du fflush (stdout); ?? weil ich das probiert habe und die gleiche ausgabe gegeben habe. Danke –
oh sorry, ich aktualisierte falsche native Methode. Ja, mit fflush (stdout) macht den Unterschied. Vielen Dank. –