Ошибка Java jMonkey, out.write внутри цикла if

У меня есть небольшая программа jMonkey с прыгающими мячиками. Я хочу каждую секунду записывать трехмерные векторы каждого мяча.

Когда я запускаю свой код:

@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(" ");

или больше.

Я делаю что-то не так? Если нет, как я могу обойти это, но выполнить ту же задачу?


person caleb.breckon    schedule 08.11.2012    source источник
comment
Как вы проверили, записана ли пустая строка?   -  person Santosh Gokak    schedule 09.11.2012
comment
Я не думаю, что понимаю, что вы имеете в виду ... но этот цикл повторяется снова и снова, поэтому между точками данных у меня была сотня пробелов.   -  person caleb.breckon    schedule 09.11.2012
comment
Что вы ожидаете, что поток напишет, когда вы дадите ему пустую строку в качестве входных данных?   -  person Santosh Gokak    schedule 09.11.2012
comment
@SantoshGokak Я понимаю, почему это происходит. Это был чисто тестовый пример, показывающий неравномерность печати, когда эта пустая строка есть, и вообще не печатание, когда она удалена.   -  person caleb.breckon    schedule 12.11.2012


Ответы (1)


У вашей программы есть чистый выход? Если ваши выходные данные буферизованы и вы пишете в них только время от времени, может потребоваться много времени для их сбросить. Если вы завершите программу до того, как она будет сброшена, и она не закроет поток должным образом, содержимое буфера никогда не будет сброшено, и результирующий файл будет пустым.

OTOH, если вы всегда пишете (код за пределами if, вероятно, будет вызываться намного чаще, чем код внутри), буфер будет заполняться быстрее, поэтому есть больше шансов, что хотя бы некоторые данные будут очищены.

Попробуйте явно вызвать out.flush() после завершения написания кода (в конце if) и посмотрите, решит ли это вашу проблему.

person mgibsonbr    schedule 12.11.2012
comment
наградит награду через 10 часов. очистка выходного потока сделала это. спасибо - person caleb.breckon; 12.11.2012