Javaでpublic native static void printSpielerToFile(Spieler s[], int length);
メソッドがあります。
私はJavaでそのようにそれを呼び出す:アプリケーション終了後にJNIメソッドが実行される
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でそれを呼び出した後に実行していますか?
ありがとうございました! – mafioso
私のネイティブメソッドで1つ以上のprintf()がある場合、 'fflush(stdout)'をどこに置くべきですか? – mafioso
@mafioso、 'fflush()'は指定されたファイルのバッファを、その名前が示唆するようにフラッシュします。ネイティブメソッドがすべての印刷を終了するまで、コンソールに何も表示する必要がなければ、 'fflush()'を最後に置いてください。それ以外の場合は、必要な場所に置いてください。必要に応じて複数の通話を使用します。 –