刚刚开始使用JNI,并且不确定为什么C中的日志消息会在应用程序终止之前发布到终端。
public static native long initialize(String arg);
public static native boolean hasImage();
public static native void dispose();
public static void main(String[] args) {
long id = ClipboardHelper.initialize("");
System.out.println(id);
try {
System.in.read(); //wait for enter key
} catch (IOException e) {
}
ClipboardHelper.dispose();
}
C代码:
JNIEXPORT jlong JNICALL Java_com_mypackage_ClipboardHelper_initialize
(JNIEnv *env, jclass obj, jstring arg) {
printf("hello world");
return 1;
}
当我运行应用程序时,我看到它从Java println
方法调用中打印1:
1
但在我按下回车键继续使用该应用之前,它不会打印hello world
。
1
hello world
我可以看到C函数返回,因为正确的数字是用Java打印的。事实上,我可以调用几种原生方法,只有在按下Enter后才会显示所有排队的printf
消息。