Basit bir c programıyla arabirim oluşturmak için JNI kullanan bir program yazıyorum. o c programı olduğu açıktır çünküJNI system.out ve printf davranışı
before
10
after
Hello JNI
bu çok garip Bana göre:
public static void main(String[] args) {
Hello h = new Hello();
System.out.println("before");
int number = h.sayHello();
System.out.println(number);
System.out.println("after");
}
ve benim sürpriz
JNIEXPORT int JNICALL Java_Hello_sayHello (JNIEnv *env, jobject obj) {
printf("Hello JNI\n");
return 10;
}
bu program döner: Ben şu programları oluşturduk "before" ve "after" ifadeleri arasında çalıştırılır (10 rakamı yazdırılır). Ancak, printf ifadesi neden çağrıldığında yürütülmez? Jvm tarafından bir şekilde engelleniyor mu, çünkü aynı anda çıktıya sadece bir program yazılabilir mi? Bu davranışı düzeltmenin bir yolu var mı?