He estado experimentando con JNI recientemente, para portar algunas bibliotecas C++ existentes.Llamadas JNI intercaladas con llamadas regulares de Java: ¿cuál es el orden de ejecución?
Como parte de mis pruebas creé un programa simple 'helloworld'. Estoy llamando a una función nativa simple en C++, que solo imprime mensajes. Estoy un poco curioso acerca de algún comportamiento que he observado al ejecutar el programa, parece que todos los mensajes/respuestas de la función nativa se imprimen después de Java System.out.print
. ¿Esto se debe a que las llamadas nativas se ejecutan después de las llamadas Java, o debo simplemente ignorar este comportamiento?
public static void main(String[] args) {
HelloWorld app = new HelloWorld();
System.out.println("say");
app.print();
System.out.println("what");
app.print();
}
La salida tiene el siguiente aspecto:
say
what
hola, world !
hola, world !
La función nativa es el siguiente:
Java_HelloWorld_print(JNIEnv *env, jobject obj) {
printf("hola, world !\n");
return;
}
¿Funcionar después de imprimir en código nativo hace la diferencia? –
te refieres a fflush (stdout); ?? porque yo probé y di la misma salida. Gracias –
oh lo siento, he actualizado el método nativo equivocado. Sí, usar fflush (stdout) hace la diferencia. Gracias. –