1

ボールが跳ね回る小さな jMonkey プログラムがあります。各ボールの 3d ベクトルを毎秒記録したいと考えています。

コードを実行すると:

@Override
public void simpleUpdate(float tpf) {
    if(getTimer().getTimeInSeconds() >= 1) {
        out.write("\n" + count + "  ");
        out.write(ball1g.getLocalTranslation() + "  ");
        out.write(ball2g.getLocalTranslation() + "  ");
        out.write(ball3g.getLocalTranslation().toString());
        count++;
        getTimer().reset();
    }
}

テキスト ファイルが完全に空白です。しかし、私が実行すると:

@Override
public void simpleUpdate(float tpf) {
    out.write("this can be anything bigger than one character wide");
    if(getTimer().getTimeInSeconds() >= 1) {
        out.write("\n" + count + "  ");
        out.write(ball1g.getLocalTranslation() + "  ");
        out.write(ball2g.getLocalTranslation() + "  ");
        out.write(ball3g.getLocalTranslation().toString());
        count++;
        getTimer().reset();
    }
}

私の実際のデータの間に途方もない量の文字があるだけで機能します。

out.write("");

何もしません。少なくとも

out.write(" ");

またはそれ以上。

私は何か間違ったことをしていますか?そうでない場合、どうすればこれを回避でき、同じタスクを達成できますか?

4

1 に答える 1

2

プログラムにはクリーンな出口がありますか? 出力がバッファリングされていて、たまにしか書き込めない場合は、フラッシュするのに時間がかかることがあります。フラッシュする前にプログラムを終了し、ストリームを適切に閉じない場合、バッファの内容は決してフラッシュされず、結果のファイルは空になります。

OTOH 常に書いている場合 (外側のifコードは内側のコードよりも多く呼び出される可能性があります)、バッファーはより速くいっぱいになるため、少なくとも一部のデータがフラッシュされる可能性が高くなります。

out.flush()コードの書き込みが終了した後 ( の最後) に明示的に呼び出しifて、問題が解決するかどうかを確認してください。

于 2012-11-12T14:49:10.257 に答える