2011-02-03 111 views

Respuesta

8

Depende de su consola, pero si es compatible con ANSI escape sequences, a continuación, intente esto ..

final static String ESC = "\033["; 
System.out.print(ESC + "2J"); 
+1

Algo como esto es probablemente la mejor opción, ya que no creo que haya una solución real de Java (+1) –

+0

ok gracias malos le permiten saber si funciona – chriss

+0

que no funcionó sabes de alguna otra manera – chriss

1

Siempre existe la obvia (y kludgy) ..

int numRowsInConsole = 60; 
for (int ii=0; ii<numRowsInConsole; ii++) { 
    // scroll down one line 
    System.out.println(""); 
} 
2

Borrado de una pantalla generalmente requiere enviando secuencias de control especiales específicas para la pantalla/terminal que su aplicación se está ejecutando. Opciones:

  1. Si sabe que siempre se ejecuta en un terminal específico y puede encontrar las secuencias de control apropiadas para borrar la pantalla para ese terminal, solo aquellas secuencias de salida. Si nos indica la pantalla, podremos indicarle la secuencia (es probable que sea compatible con ANSI/VT100/VT220).

  2. Externamente asegúrese de que su aplicación siempre se ejecute en un terminal deseado, p. un script para iniciar su aplicación inicia la aplicación en el terminal deseado. A continuación, muestre la secuencia de caracteres necesaria para borrar la pantalla.

  3. Tome el control del terminal mediante una biblioteca de emulación de terminal, es decir, su aplicación es ahora una aplicación de ventana que crea una pantalla de ventana de terminal para que el usuario la use. A continuación, controla qué terminal está emulando y sabrá qué secuencias de control se necesitan.

  4. Utilice una biblioteca de terminales (por ejemplo, como la biblioteca histórica curses) que detecta el terminal y proporciona una interfaz uniforme para sus funciones. Ver esta pregunta:

    What's a good Java, curses-like, library for terminal applications?

  5. Falsificarlo escribiendo un montón de líneas en la pantalla.

3

Ejecutar este programa de ejemplo: se muestra cómo borrar la consola usando una secuencia de escape y la posición del cursor a la posición X = 1, Y = 1.

Lo probé en varios terminales Linux. No sé, si funciona en Windows.
Tal vez usted me puede decir;)

Leer this article sobre secuencias de escape.

import java.io.*; 

public class Main { 

public static final char ESC = 27; 

public static void main(String[] args) 
     throws Exception { 
    Console c = System.console(); 
    if (c == null) { 
     System.err.println("no console"); 
     System.exit(1); 
    } 

    // clear screen only the first time 
    c.writer().print(ESC + "[2J"); 
    c.flush(); 
    Thread.sleep(200); 

    for (int i = 0; i < 100; ++i) { 
     // reposition the cursor to 1|1 
     c.writer().print(ESC + "[1;1H"); 
     c.flush(); 

     c.writer().println("hello " + i); 
     c.flush(); 

     Thread.sleep(200); 
    } 
} 

} 
+0

Me gustó la secuencia de comandos. Me gustaría saber si hay una manera de poner el texto de la consola en una variable antes de borrar la consola, y más tarde restaurar la consola de nuevo al estado en que estaba antes de ? Probablemente haciendo algo como 'buffer = System.out; ' ' System.out.print (ESC + "[1; 1H"); ' ' System.out.flush(); ' ' System.out.println ("Lorem ispum ...."); ' ' System.out.print (ESC + "[1; 1H"); ' ' System.out.flush(); ' ' System.out.println (buffer); ' – maan81

+0

Lo siento, no sabía cómo hacer comentarios de varias líneas. – maan81

+0

@ maan81 Lamentablemente, no hay forma de "almacenar" y "restaurar" System.out. Es solo una secuencia.Las capacidades de la consola de Java son * muy * limitadas. –

16

Creo que lo que OP quiere es borrar la pantalla y mover el cursor a la posición de inicio. Por esa oportunidad:

 final String ANSI_CLS = "\u001b[2J"; 
     final String ANSI_HOME = "\u001b[H"; 
     System.out.print(ANSI_CLS + ANSI_HOME); 
     System.out.flush(); 
+0

Funciona bien para mí, gracias. – electrotype

-1

Hay dos métodos muy sencillos para solucionar esto, la primera es la opción de la fuerza bruta:

for (int i=1; i<=10; i++) 
    System.out.println("\n"); 

El problema con esto sin embargo es que sólo seudo borra la pantalla, puedes desplazarte hacia arriba para ver los datos, pero no temas, ¡hay otra manera!

System.out.println("\f"); 

Voila! Eso debería ser el truco, aunque el cursor estará situado en la segunda línea de la consola después de que se borre la pantalla.

+1

¿Qué sucede si la consola tiene más de diez líneas de longitud? –

+1

Agregue varias líneas más – diegoaguilar

0
System.out.println("Hello!"); 

imprime la cadena especificada y luego mueve el cursor a la siguiente línea.

System.out.print("Hello!"); 

imprime la cadena especificada y deja el cursor inmediatamente después de esa cadena. Para resolver el problema, identificado arriba, del cursor en la segunda línea de la consola, use print en lugar de println.

0

Hice esto en BlueJ y funcionó perfectamente: Pruebe System.out.print ("\ f");

0

centro de intercambio de fiesta que está trabajando para mí:

System.out.print(String.format("\033[H\033[2J")); 
0

Que yo sepa ventana de comandos de Windows 10 cmd.exe no soporta de forma nativa secuencias ANSI ESC, a pesar de los rumores. Para tener la: trabajo

final String ANSI_CLS = "\u001b[2J"; 
System.out.print(ANSI_CLS); 

método necesita un emulador de línea de comandos que es compatible con ANSI, como ConEmu64.

0

Si ninguna de las soluciones anteriores funciona para usted (como en mi caso), trate de esta solución:

new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); 

estoy usando Windows 8 y esta solución funcionó para mí. Espero que te haga bien también. :)

Cuestiones relacionadas