我在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中启动应用程序,如果我终止它,则执行该方法 看起来像那样:
所以我的问题是:为什么这个方法在终止后执行而不是在java中调用后立即执行?
答案 0 :(得分:2)
为什么这个方法在终止后执行而不是在java中调用后立即执行?
没有。那时它的输出显示在控制台上,但是之前执行的方法。
标准输出是缓冲的,你从不显式刷新或关闭它,并且在一次运行程序期间没有写入足够的空间来填充缓冲区,因此在程序终止时stdout关闭之前不会出现输出。添加
fflush(stdout);
在printf()
之后到您的原生方法,以使输出在打印后立即显示在控制台上。