Wie kann die Rücktaste \ b in der Eclipse-Konsole verwendet werden?

79

Ich erstelle eine kleine Java-Anwendung, die eine Fortschrittsanzeige mit Prozentsätzen haben sollte. In jeder Schleife wird die Rücktaste verwendet \b, um den angezeigten Fortschritt zu entfernen, bevor der nächste Prozentsatz angezeigt wird.

Hier ist ein vereinfachtes Beispiel:

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

Dies funktioniert perfekt in der Eingabeaufforderung, aber die Rücktaste wird in der Eclipse-Konsole nicht erkannt (Galileo Build 20090920-1017). Stattdessen wird ein leeres Quadrat angezeigt, das ein unbekanntes Zeichen kennzeichnet. Siehe Screenshot:

Alt-Text

Wie bringe ich Eclipse dazu, die Rücktaste richtig "anzuzeigen"? Dh lassen Sie es das vorherige Zeichen entfernen.

Dies ist eigentlich kein Showstopper, da es nur in der Befehlskonsole ausgeführt wird, aber es wäre einfach schön, wenn es auch in Eclipse funktioniert :)

BalusC
quelle
1
Ich sehe die gleichen Symptome in NetBeans
PMorganCA

Antworten:

57

Eclipse Bug # 76936. Ich würde mich nicht darauf verlassen, dass sie das Problem beheben, und es sind keine Problemumgehungen aufgeführt.

Möglicherweise haben Sie Glück, ein Plugin zu finden, das zu einer erweiterten Konsole beiträgt.

Mark Peters
quelle
16
Siehe Kommentar Nr. 24 - "... das Debug-Team verfügt derzeit nicht über die Zeit / Ressourcen, um daran zu arbeiten. Beiträge wären sehr dankbar. "
Stephen C
6
@BryanHunt anscheinend ist es nicht wichtig, dass jemand entscheidet, was für die nächste Version von Eclipse zu tun ist. Anscheinend ist es auch für dich nicht wichtig genug.
Thorbjørn Ravn Andersen
14
Ich habe den Fehler behoben, es sollte in 4.5 M4 sein.
Philippe Marschall
2
@PhilippeMarschall Ich möchte Ihre harte Arbeit nicht verringern, aber soweit ich das beurteilen kann, ist es mit Sicherheit nicht behoben (mit Mars-Version). Das Drucken von Rücktaste-Zeichen hat für mich keine Auswirkung. Bearbeiten: Es scheint, dass der Fehler tatsächlich wieder aufgetreten ist. Siehe die letzten beiden Einträge im Fehlerbericht, der in dieser Antwort verlinkt ist.
b1nary.atr0phy
1
Laut bugs.eclipse.org/bugs/show_bug.cgi?id=76936 ist der Fix für Eclipse 4.6 mit einem geplanten Veröffentlichungsdatum am 22. Juni 2016 geplant ( projects.eclipse.org/projects/eclipse/releases/4.6.0) / plan ). : /
Simon
8

Nun, es ist wahr, dass Sie die Rücktaste \ b nicht verwenden können, um den angezeigten Fortschritt zu entfernen, aber Sie können ihn entfernen, indem Sie die Konsole mit einer Schleife löschen, die println aufruft. Natürlich wird diese Kluge Ihre Protokolldatei nicht löschen!

EMurnane
quelle
"Löschen der Konsole mit ..." wie genau? println () kann die bereits gedruckte Zeile auf der Konsole nicht löschen!
KNU
1
Es kann die bereits gedruckte Ausgabe nach oben verschieben, sodass sie aus dem sichtbaren Bereich der Konsole austritt und die Konsole effektiv löscht.
Simon
3

Behoben, Eclipse Mars.

Beachten Sie, dass ich es nicht für ständige Aktualisierungen verwenden würde, da die Eclipse-Konsole verzögert ist.

gagarwa
quelle
6
In Neon.3 ( System.out.println("x\by")) nicht behoben .
Matthieu
2

Jetzt haben sie es behoben, aber es ist standardmäßig deaktiviert. Sie sollten es über Interpret ASCII control charactersin den Konsoleneinstellungen aktivieren .

Павел
quelle
-4

Verwenden Sie: System.out.print ("\ b") innerhalb der while-Schleife anstelle von System.out.print ('\ b').

Fisho2008
quelle