Java ProgressBar в командной строке [темы] - PullRequest
0 голосов
/ 02 марта 2011

Я искал форум раньше здесь и нашел несколько примеров реализации индикатора выполнения в командной строке.Теперь у меня есть дополнительный вопрос.Я использую следующий пример реализации:

public void print_progress(int percent){

StringBuilder bar = new StringBuilder(category + ": [");

    for(int i = 0; i < 50; i++){
        if( i < (percent/2)){
            bar.append("=");
        }else if( i == (percent/2)){
            bar.append(">");
        }else{
            bar.append(" ");
        }
    }

    bar.append("]   " + percent + "%     ");
    System.out.print("\r" + bar.toString());
}

Но я хочу использовать его в трех потоках, работающих одновременно, хочу показать прогресс для каждого потока в строке, подобной той, что в командной строке,Прямо сейчас всякий раз, когда поток вызывает метод print_progress (), он перезаписывает один из потоков ранее.

Может кто-нибудь сказать, возможно ли это, и если да, то как?

Большое спасибо ввперед.

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

Представление

В простой командной строке это невозможно, если ваш индикатор выполнения занимает целую строку. Вы можете вернуться к началу строки с помощью \r, но не можете вернуться к предыдущей строке.

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

Проблемы многопоточности

Сложно иметь несколько потоков, упорядоченно выводящих в один поток. Гораздо проще заставить другой поток обрабатывать вывод и получать сообщения из рабочих потоков.

Эти сообщения могут принимать форму элементов в поточно-ориентированной очереди, сигналов, байтов в поточно-ориентированном потоке или чего угодно, с чем вам удобно.

0 голосов
/ 02 марта 2011

Для реализации обновления трех индикаторов выполнения на эмуляторе терминала / консоли вам потребуется библиотека Java, которая может выполнять манипуляции с экраном на эмуляторе терминала ... как это делали классические экранные редакторы.

Этот вопрос SO спрашивает о наличии таких библиотек.

...