¿Cómo hacer que backspace \ b funcione en la consola de Eclipse?

79

Estoy creando una pequeña aplicación Java que debería tener un indicador de progreso con porcentajes. En cada bucle, utiliza retroceso \bpara eliminar el progreso mostrado antes de mostrar el siguiente porcentaje.

Aquí tienes un ejemplo simplificado:

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

Esto funciona perfectamente en el símbolo del sistema, pero el carácter de retroceso no se reconoce en la consola de Eclipse (compilación de Galileo 20090920-1017). En cambio, muestra un cuadrado vacío que denota un personaje desconocido. Ver captura de pantalla:

texto alternativo

¿Cómo hago para que Eclipse "muestre" el retroceso correctamente? Es decir, deja que elimine el carácter anterior.

En realidad, esto no es sorprendente, ya que solo se ejecutará en la consola de comandos, pero sería bueno que también funcione en Eclipse :)

BalusC
fuente
1
Veo los mismos síntomas en NetBeans
PMorganCA

Respuestas:

57

Error de Eclipse # 76936. No contaría con ellos para solucionarlo, y no se enumeran soluciones alternativas.

Es posible que tenga suerte al encontrar un complemento que contribuya con una consola más avanzada.

Mark Peters
fuente
16
Ver comentario # 24 - "... el equipo de depuración no tiene actualmente el tiempo / recursos para trabajar en esto. Las contribuciones serán muy apreciadas "
Stephen C
6
@BryanHunt aparentemente no es importante para quien toma decisiones sobre qué hacer para la próxima versión de Eclipse. Aparentemente tampoco es lo suficientemente importante para ti.
Thorbjørn Ravn Andersen
14
Arreglé el error, debería estar en 4.5 M4.
Philippe Marschall
2
@PhilippeMarschall No pretendo disminuir su arduo trabajo, pero hasta donde puedo decir, ciertamente no está arreglado (usando la versión de Mars). Imprimir caracteres de retroceso no tiene ningún efecto para mí. Editar: parece que el error ha resurgido, vea las dos últimas entradas en el informe de error vinculado en esta respuesta.
b1nary.atr0phy
1
Según bugs.eclipse.org/bugs/show_bug.cgi?id=76936, la corrección está prevista para Eclipse 4.6 con una fecha de lanzamiento prevista del 22 de junio de 2016 ( projects.eclipse.org/projects/eclipse/releases/4.6.0 / plan ). : /
simon
8

Bueno, es cierto que no puede usar retroceso \ b para eliminar el progreso mostrado, pero puede eliminarlo borrando la consola con un bucle que llame a println. ¡Por supuesto que este kluge no borrará su archivo de registro!

EMurnane
fuente
"limpiar la consola con ...." ¿cómo exactamente? println () no puede borrar la línea ya impresa en la consola.
KNU
1
Puede empujar la salida ya impresa hacia arriba para que salga del área visible de la consola, limpiando efectivamente la consola.
Simon
3

Fijo, Eclipse Mars.

Tenga en cuenta que no lo usaría para realizar actualizaciones constantes, ya que la consola eclipse se retrasa.

Gagarwa
fuente
6
Sin fijar en Neon.3 ( System.out.println("x\by")).
Matthieu
3

Ahora lo arreglaron, pero está deshabilitado por defecto. Debe habilitarlo a través Interpret ASCII control charactersde las preferencias de la consola.

Павел
fuente
Esto funcionó en Eclipse IDE para desarrolladores de Java Versión: 2019-12 (4.14.0). Gracias
nessa.gp
-4

use: System.out.print ("\ b") dentro del ciclo while, en lugar de System.out.print ('\ b');

Fisho2008
fuente