Как заставить backspace \ b работать в консоли Eclipse? - PullRequest
74 голосов
/ 22 июня 2010

Я создаю небольшое 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). Вместо этого отображается пустой квадрат, обозначающий неизвестного персонажа. Смотреть скриншот:

alt text

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

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

Ответы [ 4 ]

56 голосов
/ 22 июня 2010

Eclipse Bug # 76936. Я бы не рассчитывал на то, что они исправят это, и в списке нет обходных путей.

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

8 голосов
/ 23 июня 2010

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

3 голосов
/ 25 июля 2015

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

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

0 голосов
/ 26 июля 2016

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

...