gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:23 26 4
gpt4 key购买 nike

我在 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中调用后立即执行?

最佳答案

Why does this method execute after termination and not immediately after calling it in java?

事实并非如此。那是它的输出出现在控制台上的时候,但是方法执行得更早。

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

fflush(stdout);

到您的本地方法,在 printf() 之后,使输出在打印后立即出现在控制台上。

关于java - JNI 方法在终止应用程序后执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40027721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com