# Konsolenanimationen



## Dante (10. Okt 2005)

Hallo, ich würde gerne kleinere Konsolenanimationen bauen, zB. um anzuzeigen daß das Programm noch etwas tut. Schön wäre zB. ein drehender Strich  [1] oder sowas. 

Problem ist a) ich weiss nicht wie lange das Programm noch läuft (also bringt eine ProgressBar nix)
b) das Programm könnte lange laufen (es baut aus mehreren hundert MB Eingabedaten einen phonetischen Wortindex auf)

Im Allgemeinen habe ich überhaupt keine Ahnung wie man sowas unter Java realisieren würde, für Tipps wäre ich dankbar 


[1] Folgendes als ASCII-Animation: - \ | / - \ | / - usw.


----------



## L-ectron-X (10. Okt 2005)

Ich habe mal eine einfache Digitaluhr geschrieben, die auf der Console läuft:

```
import java.io.*;
import java.text.*;
import java.util.*;

public class ConsolenUhr {
   public static void main(String[] args) {
      ConsolenUhr cb = new ConsolenUhr();
   }
   
   public ConsolenUhr() {
      new ZeitAusgabe().start();
      new Eingabe().start();
   }
   
   class Eingabe extends Thread {
      BufferedReader br;
      
      public Eingabe() {
         br = new BufferedReader(new InputStreamReader(System.in));
      }
      
      public void run() {
         char c = 0;
         while(c != 'q') { //Exit mit Tastendruck auf "q"
            try {
               c = (char)br.read();
            }
            catch(IOException e) {
               System.out.println("Fehler beim Lesen von der Tastatur!");
            }
         }
         System.exit(0);
      }
   }
   
   //Eine Uhr, die auf einer Zeile in der Konsole läuft
   class ZeitAusgabe extends Thread {
      DateFormat df = new SimpleDateFormat("HH:mm:ss");
      public void run() {
         String zeit = null;
         while(true) {
            zeit = df.format(new Date());
            System.out.print(zeit);
            try {
               Thread.sleep(1000);
            }
            catch(InterruptedException e) {
               System.out.println("Fehler während CPU-Freigabe");
            }
            for(int i = 0, j = zeit.length();i < j; i++) {
               System.out.print("\b"); //Zeichen löschen
            }
         }
      }
   }
}
```
Eine Animation, wie du sie haben möchtest funktioniert so ähnlich. Ich habe sowas schon mal hier gepostet, weiß aber leider den Thread nicht mehr.


----------



## Dante (10. Okt 2005)

Gefehlt hat mir das \b um die Zeile zu löschen (danke!), so kann man schon ganz nette Sachen bauen:


```
public class Animation {

	public static void main(String[] args) throws InterruptedException {
		
		//char[] chars = {'-', '\\', '|', '/'}; 
		char[] chars = {'O', '0', 'o', '.', 'o', '0'};
		int index = 0;
		while(true) {
			Thread.sleep(100);
			System.out.print("\b");
			System.out.print(chars[index]);
			index = (index+1) % chars.length;
		}
	}
}
```

Interessant wäre nun der Trick um so ewas wie Fortschrittsbalken zu bauen:


```
[          ]

[**        ]

[*****     ]
```

Da bräuchte man wohl schon etwas wie Curses?!


----------



## na-oma (10. Okt 2005)

geht doch auch, du löschst halt immer soviel, wie du gerade eben geschrieben hast und schreibst das wieder neu hin also:
[_____]
dann 7 mal löschen
dann ausgeben
[*____]
dann 7 mal löschen
dann ausgeben
[**___]
...


----------



## Dante (10. Okt 2005)

Stimmt.  


Gibt es eigentlich noch andere Möglichkeiten die letzte Zeiule zu löschen, abgesehen von \b? Vielleicht etwas, womit die eclipse-Konsole klarkommt?


----------



## Ilja (30. Nov 2005)

\r geht an den anfang der zeile.... ab hier kannste deinen balken neu malen, ohne x-mal \b aufzurufen


----------

