Jak sprawić, by backspace \ b działał w konsoli Eclipse?

79

Tworzę małą aplikację Java, która powinna mieć wskaźnik postępu z procentami. W każdej pętli używa Backspace, \baby usunąć wyświetlany postęp przed wyświetleniem następnego procentu.

Oto uproszczony przykład:

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!");
}

Działa to doskonale w wierszu poleceń, ale znak backspace nie jest rozpoznawany w konsoli Eclipse (kompilacja Galileo 20090920-1017). Zamiast tego wyświetla pusty kwadrat oznaczający nieznany znak. Zobacz zrzut ekranu:

tekst alternatywny

Jak sprawić, aby Eclipse prawidłowo „wyświetlał” backspace? To znaczy niech usunie poprzedni znak.

W rzeczywistości nie jest to showstopper, ponieważ zostanie uruchomiony w konsoli poleceń, ale byłoby miło, gdyby działał również w Eclipse :)

BalusC
źródło
1
Widzę te same objawy w NetBeans
PMorganCA,

Odpowiedzi:

57

Błąd Eclipse # 76936. Nie liczyłbym na to, że to naprawią, i nie ma na liście obejść.

Możesz mieć szczęście w znalezieniu wtyczki, która wnosi wkład w bardziej zaawansowaną konsolę.

Mark Peters
źródło
16
Patrz komentarz nr 24 - „… zespół debugujący nie ma obecnie czasu / zasobów, aby nad tym pracować. Składki będą bardzo mile widziane.
Stephen C,
6
@BryanHunt najwyraźniej nie jest ważne dla osoby, która decyduje, co zrobić z następną wersją Eclipse. Najwyraźniej to też nie jest dla ciebie wystarczająco ważne.
Thorbjørn Ravn Andersen
14
Naprawiłem błąd, powinien być w 4.5 M4.
Philippe Marschall
2
@PhilippeMarschall Nie chcę umniejszać twojej ciężkiej pracy, ale o ile wiem, z pewnością nie jest to naprawione (używając wydania Mars). Drukowanie znaków backspace nie ma dla mnie żadnego efektu. Edycja: Wygląda na to, że błąd rzeczywiście pojawił się ponownie, zobacz ostatnie dwa wpisy w raporcie o błędzie, do których link znajduje się w tej odpowiedzi.
b1nary.atr0phy
1
Według bugs.eclipse.org/bugs/show_bug.cgi?id=76936 poprawka jest planowane na Eclipse 4.6 z docelową datą wydania z dnia 22 czerwca 2016 ( projects.eclipse.org/projects/eclipse/releases/4.6.0 / plan ). : /
simon
8

Cóż, to prawda, że ​​nie możesz użyć klawisza Backspace \ b do usunięcia wyświetlanego postępu, ale możesz go usunąć, czyszcząc konsolę pętlą wywołującą println. Oczywiście ten kluge nie wyczyści Twojego pliku dziennika!

EMurnane
źródło
„czyszczenie konsoli za pomocą…” jak dokładnie? println () nie może wyczyścić już wydrukowanej linii na konsoli!
KNU
1
Może popchnąć już wydrukowany wydruk do góry, aby wydostał się z widocznego obszaru konsoli, skutecznie oczyszczając konsolę.
simon
3

Naprawiono, Eclipse Mars.

Uwaga, nie użyłbym go do ciągłej aktualizacji, ponieważ konsola eclipse jest opóźniona.

gagarwa
źródło
6
Unfixed w Neon.3 ( System.out.println("x\by")).
Matthieu
3

Teraz to naprawili, ale jest domyślnie wyłączony. Powinieneś to włączyć Interpret ASCII control charactersw preferencjach konsoli.

Павел
źródło
To działało w Eclipse IDE for Java Developers Version: 2019-12 (4.14.0). Dzięki
nessa.gp
-4

użyj: System.out.print ("\ b") wewnątrz pętli while zamiast System.out.print ('\ b');

Fisho2008
źródło