为什么在应用程序终止之前,此JNI功能不会打印?

时间:2016-06-17 03:38:01

标签: java c java-native-interface

刚刚开始使用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消息。

0 个答案:

没有答案