Как заставить backspace \ b работать в консоли Eclipse?

79

Я создаю небольшое Java-приложение, которое должно иметь индикатор прогресса с процентами. В каждом цикле он использует backspace, \bчтобы удалить отображаемый прогресс перед отображением следующего процента.

Вот упрощенный пример:

public static void main(String[] args) throws Exception {
    System.out.print("Progress: ");
    for (int percentage = 0; percentage < 100; percentage++) {
        System.out.print(percentage + "%");
        Thread.sleep(10); // Stub for "long running task".
        int length = String.valueOf(percentage).length() + 1;
        while (length-- > 0) {
            System.out.print('\b');
        }
    }
    System.out.println("finished!");
}

Это отлично работает в командной строке, но символ возврата не распознается в консоли Eclipse (сборка Galileo 20090920-1017). Вместо этого отображается пустой квадрат, обозначающий неизвестный символ. Смотрите скриншот:

альтернативный текст

Как мне заставить Eclipse правильно "отображать" backspace? Т.е. пусть удалит предыдущий символ.

На самом деле это не showstopper, поскольку он будет запускаться только в командной консоли, но было бы неплохо заставить его работать и в Eclipse :)

BalusC
источник
1
Я вижу те же симптомы в NetBeans
PMorganCA

Ответы:

57

Ошибка затмения № 76936. Я бы не стал рассчитывать на то, что они это исправят, а обходных путей не перечислено.

Возможно, вам повезет найти плагин, который предлагает более продвинутую консоль.

Марк Питерс
источник
16
См. Комментарий №24 - «... у команды отладки в настоящее время нет времени / ресурсов для работы над этим. Мы будем очень благодарны за вклад »
Стивен С.
6
@BryanHunt, очевидно, не важно для того, кто принимает решение о том, что делать со следующей версией Eclipse. Видимо, и для вас это мало важно.
Торбьёрн Равн Андерсен,
14
Исправил ошибку, должно быть в 4.5 M4.
Philippe Marschall
2
@PhilippeMarschall Я не хочу преуменьшать вашу тяжелую работу, но, насколько я могу судить, это определенно не исправлено (с использованием версии Mars). Печать символов возврата на меня не влияет. Изменить: похоже, что ошибка действительно появилась, см. Последние две записи в отчете об ошибке, ссылка на который есть в этом ответе.
b1nary.atr0phy
1
Согласно bugs.eclipse.org/bugs/show_bug.cgi?id=76936 исправление планируется для Eclipse 4.6 с целевой датой выпуска 22 июня 2016 г. ( projects.eclipse.org/projects/eclipse/releases/4.6.0 / план ). : /
Саймон
8

Что ж, правда, вы не можете использовать backspace \ b для удаления отображаемого прогресса, но вы можете удалить его, очистив консоль с помощью цикла, вызывающего println. Конечно, этот клудж не очистит ваш лог-файл!

EMurnane
источник
"очистка консоли с помощью ...." как именно? println () не может очистить уже напечатанную строку на консоли!
KNU
1
Он может подтолкнуть уже напечатанный вывод вверх, чтобы он не выходил из видимой области консоли, эффективно очищая консоль.
Саймон
3

Исправлено, Eclipse Mars.

Обратите внимание, я бы не стал использовать его для постоянного обновления, так как консоль eclipse тормозит.

гагарва
источник
6
Не зафиксировано в Neon.3 ( System.out.println("x\by")).
Matthieu
3

Сейчас исправили, но по умолчанию отключено. Вы должны включить его Interpret ASCII control charactersв настройках консоли.

Павел
источник
Это работало в Eclipse IDE для разработчиков Java версии: 2019-12 (4.14.0). Спасибо
nessa.gp
-4

используйте: System.out.print ("\ b") внутри цикла while вместо System.out.print ('\ b');

Fisho2008
источник