2009-08-24 4 views
4

Je crée un programme de ligne de commande java.Comment est-ce que je peux faire l'affichage d'une ligne dans mon programme java de ligne de commande change sans afficher une nouvelle ligne?

Comment puis-je modifier le contenu d'une ligne déjà affichée?

Ainsi, par exemple, je pouvais afficher:

Statut: 0%
Statut: 2%
...
Statut: 50%

Sauf, plutôt que de continuer à pousser vers le bas chaque nouvelle ligne, je modifie simplement le contenu de la ligne existante, de sorte que le% fait change en place.

J'ai vu des programmes de console faire cela auparavant, alors comment puis-je le faire en java?

Répondre

3

Dans la plupart des cas, vous pouvez générer un retour chariot (\r) plutôt qu'un saut de ligne (\n). Cela dépend du terminal qui le supporte, ce que la plupart font. \r ramène le curseur au début de la ligne.

EDIT: Il est évident que, quand vous le faites, utilisez System.out.print plutôt que System.out.println (ou tout simplement généralement utiliser la plaine, non ln, sous forme de la méthode de sortie que vous utilisez) - depuis le suffixe ln signifie que votre texte est automatiquement suivi d'une nouvelle ligne.

Exemple:

for (n = 10000; n < 10010; ++n) { 
    System.out.print(String.valueOf(n) + "\r"); 
} 
System.out.println("Done"); 

Lorsque cela se termine, vous aurez probablement cela sur l'écran de votre console:

Done0 

... depuis "Terminé" est plus courte que la plus longue chose précédente vous sortie, et donc pas complètement l'écraser (d'où le 0 à la fin, à gauche de "10010"). Donc, la leçon est: Gardez une trace de la plus longue chose que vous écrivez et écrasez-le avec des espaces.

+0

aura-t-il pas ajouter la sortie à la en sortie "print" précédemment? –

+0

Un code que je connais utilise '\ b' pour" reculer "les bits à remplacer, plutôt que de remplacer toute la ligne par' \ r'. –

+0

@Isharyan: '\ r' place le curseur au début de la ligne (" pour la plupart des terminaux "), donc tout ce que vous ajoutez après il apparaîtra au début de la ligne. –

2

Jetez un oeil à this example.

Code de travail:

public class progress { 
    public static void main(String[] args) throws InterruptedException {  
     for (int i = 0; i <= 100; i++) { 
      Thread.sleep(30); 
      System.out.print("\rSTATUS: "+i+" % "); 
     } 
    } 
} 

Astuce: Pour plus Google - Console java barre de progression

+0

J'ajouterais que JLine fonctionne très bien pour ce genre de choses –

Questions connexes