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 回答