# Konsolenzeile überschreiben?



## Novanic (8. Okt 2006)

Hi Leute,

ich würde gerne meine Konsolen-Ausgaben immer in die gleiche Zeile schreiben (letzte Zeile), sodass die Zeile jedesmal wieder überschrieben wird.

Ich dachte mir dass das eigentlich mit Carriage Return (\r) gehen müsste, aber leider wird dabei wie bei \n auch jedesmal eine neue Zeile erzeugt...

Weiß jemand wie ich das lösen kann?

Danke schonmal im Voraus. 

Gruß Nova


----------



## dieta (8. Okt 2006)

Versuch's vllt. mal mit "\b" (dem Ruckschritt (Backspace)).


----------



## Bert Brenner (9. Okt 2006)

Oder vielleicht JCurses


----------



## thE_29 (9. Okt 2006)

```
public class Cariage
{

public static void main(String args[])
{
System.out.print("BLA BLA BLA");
System.out.print("\r");
System.out.print("HIPHIPHIP");


}

}
```


Diese 2 Zeilen sind unter WINDOWS (nicht Linux!) überein!

Und niemals von der IDE Ausgabe auf die Dos Ausgabe schließen, die stimmt nie!


----------



## dieta (9. Okt 2006)

Mit \r "sagt" man ihm ja auch nur, dass er den Cursor wieder an den Zeilenanfang setzen soll. Um die Ausgabe zu löschen, muss man \r       , dann so viele oder mehr Leerzeichen wie die Ausgabe lang ist, und dann nochmal \r schreiben.


----------



## thE_29 (9. Okt 2006)

ich würde gerne meine Konsolen-Ausgaben immer in die gleiche Zeile schreiben (letzte Zeile), sodass die Zeile jedesmal wieder überschrieben wird. 


Naja, das will er ja ^^

Hier steht nix von Zeile löschen


----------



## Guest (9. Okt 2006)

```
import java.util.Arrays;

public class Progress implements Runnable {
   private int outputLength = 0;

   public void run() {
      try {
         for (int i = 1; i <= 10; i++) {
            print("Loop " + i + " of 10");
            Thread.sleep(1000);
         }
         print("Done");
      } 
      catch (InterruptedException e) {
         // who cares ;-)
      }
   }

   private void print(String s) {
      clear();
      outputLength += s.length();
      System.out.print(s);
   }

   private void clear() {
      if (outputLength > 0) {
         // n * Backspace + n * ' ' + n * Backspace     
         // Also, zuerst zum Zeilenanfang bewegen, dann alles mit Leerzeichen
         // überschreiben und wieder zurück zu Zeilenanfang.
         // Dies funktioniert nur, wenn noch kein Zeilenumbruch erfolgt ist.
         char buffer[] = new char[outputLength * 3];
         Arrays.fill(buffer, (char) 8);
         Arrays.fill(buffer, outputLength, outputLength * 2, ' ');
         System.out.print(buffer);
         outputLength = 0;
      }
   }

   public static void main(String argv[]) {
      new Thread(new Progress()).start();
   }
}
```


----------

