2011-02-03 2 views
9

Quale comando in Java consente di cancellare la console in un'applicazione della riga di comando?in java per cancellare lo schermo

+2

chiarire. Quale schermo? La console? –

+2

quale schermo tra l'altro? –

risposta

8

Dipende dalla tua console, ma se supporta ANSI escape sequences, quindi provare questo ..

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

Una cosa del genere è probabilmente la soluzione migliore, perché non penso che ci sia una vera soluzione Java (+1) –

+0

ok grazie di mal fatevi sapere se funziona – chriss

+0

che non funzionava sapete in nessun altro modo – chriss

1

C'è sempre l'ovvio (e kludgy) ..

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

Cancellazione di uno schermo richiede in genere invio di sequenze di controllo speciali specifiche per lo schermo/terminale sotto cui l'applicazione è in esecuzione. Opzioni:

  1. Se sai che sarà sempre in esecuzione in un terminale specifico e può trovare le sequenze di controllo adeguate per cancellare lo schermo per quel terminale, appena uscita quelle sequenze. Se ci comunichi lo schermo, potremmo essere in grado di dirti la sequenza (probabilmente è ANSI/VT100/VT220 -compatibile).

  2. Verificare esternamente che l'app venga sempre eseguita nel terminale desiderato, ad es. uno script per avviare la tua app avvia l'app nel terminale desiderato. Quindi emettere la sequenza di caratteri necessaria per cancellare lo schermo.

  3. Assumi il controllo del terminale utilizzando una libreria di emulazione di terminale, ad esempio l'app è ora un'app per finestre che crea una schermata finestra terminale che l'utente può utilizzare. Quindi controlli quale terminale stai emulando e saprai quali sequenze di controllo sono necessarie.

  4. Utilizzare una libreria di terminale (ad esempio la libreria storica curses) che rileva il terminale e fornisce un'interfaccia uniforme alle sue caratteristiche. Vedere questa domanda:

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

  5. Simularlo scrivendo una serie di linee alla schermata.

3

Esegui il programma di esempio: dimostra come cancellare la console tramite una sequenza di escape e riposizionare il cursore nella posizione X = 1, Y = 1.

L'ho provato su diversi terminali Linux. Non so, se funziona sotto Windows.
Forse mi si può dire;)

Leggi this article su sequenze di 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

Mi è piaciuta la sceneggiatura. vorrei sapere se c'è un modo per mettere il testo della console in una variabile prima di cancellare la console, e più tardi ripristinare la console allo stato in cui si era prima? Probabilmente facendo qualcosa come '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

Spiacente, non sapevo come fare commenti su più righe. – maan81

+0

@ maan81 Purtroppo non c'è modo di "memorizzare" e "ripristinare" System.out. È solo un flusso.Le funzionalità della console Java sono * molto * limitate. –

16

Penso che quello che il PO vuole è per cancellare lo schermo e spostare il cursore nella posizione iniziale. Per tale prova:

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

Funziona bene per me, grazie. – electrotype

-1

Ci sono due modi molto semplici per risolvere questo, il primo è l'opzione forza bruta:

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

Il problema tuttavia è che solo pseudo cancella lo schermo, puoi scorrere verso l'alto per vedere i dati, ma non temere, c'è un altro modo!

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

Voilà! Questo dovrebbe fare il trucco, anche se il cursore si troverà sulla seconda riga della console dopo che lo schermo è stato cancellato.

+1

Cosa succede se la console è più grande di dieci linee di lunghezza? –

+1

Aggiungi più righe in più – diegoaguilar

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

stampa la stringa specificata e sposta il cursore sulla riga successiva.

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

stampa la stringa specificata e lascia il cursore subito dopo quella stringa.

Per risolvere il problema, sopra identificato, del cursore sulla seconda riga della console, utilizzare print anziché println.

0

Ho fatto questo in BlueJ e ha funzionato perfettamente: Prova System.out.print ("\ f");

0

di compensazione per bash che sta lavorando per me:

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

A mia conoscenza della finestra dei comandi di Windows 10 del cmd.exe non supporta nativamente le sequenze ANSI ESC, nonostante le voci. Per avere:

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

metodo di lavoro è necessario un emulatore di riga di comando che supporti ANSI, come ConEmu64.

0

Se nessuna delle soluzioni sopra funziona per voi (come nel mio caso), provare questa soluzione:

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

Sto utilizzando Windows 8 e questa soluzione ha funzionato per me. Spero che lo faccia anche a te. :)