Piszę program, który używa JNI do interfejsu z prostym programem c. I zostały utworzone następujące programy:JNI system.out i zachowanie printf
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");
}
i
JNIEXPORT int JNICALL Java_Hello_sayHello (JNIEnv *env, jobject obj) {
printf("Hello JNI\n");
return 10;
}
ku mojemu zdziwieniu ten program zwróci:
before
10
after
Hello JNI
Dla mnie jest to bardzo dziwne, ponieważ oczywiste jest, że program c jest wykonywane między instrukcją "przed" i "po" (drukowana jest liczba 10). Ale dlaczego instrukcja printf nie jest wykonywana, gdy zostanie wywołana. Czy jest w jakiś sposób zablokowany przez jvm, ponieważ tylko jeden program może zapisywać na wyjściu w tym samym czasie? Czy istnieje sposób na naprawienie tego zachowania?