终止应用程序后执行JNI方法

时间:2016-10-13 17:48:12

标签: java c java-native-interface

我在Java中有一个public native static void printSpielerToFile(Spieler s[], int length);方法 我在java中这样称呼它:

public static void setMeineSpieler(ArrayList<Spieler> meineSpieler) {
    JNIResultSet.meineSpieler = meineSpieler;
    // size -1 because the last object is empty due to the empty row on the bottom
    Spieler[] s = new Spieler[meineSpieler.size() - 1];

    for (int i = 0; i < meineSpieler.size() - 1; i++) {
        s[i] = meineSpieler.get(i);
    }
    printSpielerToFile(s, s.length);
}

,C代码看起来像这样:

JNIEXPORT void JNICALL
Java_model_JNIResultSet_printSpielerToFile(JNIEnv *env, jclass jcl, jobjectArray arr, jint len) {
int i = 0;
printf("length: %d", len);
}

在java中一切正常但问题是只有在应用程序完成后才会执行C代码 我通过脚本在linux中启动应用程序,如果我终止它,则执行该方法 看起来像那样:

enter image description here

所以我的问题是:为什么这个方法在终止后执行而不是在java中调用后立即执行?

1 个答案:

答案 0 :(得分:2)

  

为什么这个方法在终止后执行而不是在java中调用后立即执行?

没有。那时它的输出显示在控制台上,但是之前执行的方法。

标准输出是缓冲的,你从不显式刷新或关闭它,并且在一次运行程序期间没有写入足够的空间来填充缓冲区,因此在程序终止时stdout关闭之前不会出现输出。添加

fflush(stdout);
printf()之后

到您的原生方法,以使输出在打印后立即显示在控制台上。