Я пытаюсь сделать кроссплатформенный индикатор прогресса консоли на Java. Поэтому я использую метод System.out.printf для вывода процентного значения:
System.out.printf("\t%2.2f%%\b\b\b\b\b\b", percentage);
и помещаю его в цикл for. Проблема, с которой я сталкиваюсь, заключается в том, что он ничего не печатает, пока весь цикл for не будет выполнен. Это пример программы, показывающий проблему:
public class Test {
public static void main(String[] args) {
for(int i =0; i<5000; i++){
System.out.printf("\b\b\b\b\b\b%2.2f%%", ((float) i/5000f)*100f);
System.out.flush();
}
}
}
Я думаю, что проблема как-то связана с оптимизацией компилятора, но я не уверен. Странно то, что System.out.println
печатается во время работы цикла for.
Редактировать:Забыл добавить в задачу. Но я уже пытался очистить буфер. Это не имеет значения. Добавление %n
в конец моей строки printf работает, но начинается новая строка, мне действительно нужно повторно использовать текущую строку.
Все противоположные решения работают. Но они работают только на настоящих консолях. Не консоль netbeans или eclipse.