# Ausgabe auf stdout "löschen" und dafür neue Ausgab



## beachdiddi (26. Jun 2007)

Hallo,

ich hab mal eine Frage und finde dazu nichts, bzw weiß nicht genau mit welchen Worten ich danach suchen muss.
Ist es möglich, dass beim Aufruf eines Programms über die Kommandozeile etwas ausgegeben wird, das nachher wieder gelöscht wird.
Zum Beispiel den Namen einer Datei, die ein Thread gerade einliest.
Wenn dieser Thread die nächste Datei einliest, soll der Name von der Ausgabe gelöscht werden (ähnlich dem Clearscreen) und der neue Dateiname soll erscheinen.

Danke schonmal,  

mfg, beachdiddi


----------



## Rydl (26. Jun 2007)

nein, also wenn ich mich nicht irre, geht sowas nicht mit java.


----------



## hupfdule (26. Jun 2007)

Geht nicht direkt. Für so was musst du curses benutzen. Gibts in Form von JCurses für Java. Braucht aber ein native Bibliothek.


----------



## Hilefoks (26. Jun 2007)

Curses ist schon die bessere Wahl aber dennoch: Du kannst auch passende Escape-Sequenzen verwenden. Unter Unix/Linux/MacOS X brauchst du dazu VT100 kompatible. Mit Windows kenne ich mich nicht aus, sollte aber auch dort passende geben.

MfG,
Hilefoks


----------



## Leroy42 (26. Jun 2007)

Rydl's Signature hat gesagt.:
			
		

> Das Leben ist ein Hund.



Gefällt mir!   

Was genau bedeutet daß?  ???:L


----------



## beachdiddi (26. Jun 2007)

Ich habe mich jetzt mal mit JCurses beschäftigt, muss aber sagen, dass ich es nicht so richtig zum laufen bringe.

Ich habe mir das Linux-Paket runtergeladen und versucht nach dem README vorzugehen.
Aber es funktioniert so nicht.
Wie kann ich JCurses in meinem aktuellen Projekt nutzen?


----------



## beachdiddi (26. Jun 2007)

Versuche hier grad folgendes:

```
import jcurses.system.*;

public class Test {
	
	public static void main(String[] args) {
		short bg = CharColor.BLACK;
		short fg = CharColor.WHITE;
		CharColor screenColors = new CharColor(bg, fg);
		Toolkit.clearScreen(screenColors);

	}

}
```

Kompilieren geht ohne Probleme. Aber beim Ausführen bekomme ich folgende Fehlermeldung:


> Exception in thread "main" java.lang.NoClassDefFoundError: Test


Bin ratlos  :bahnhof:


----------



## L-ectron-X (26. Jun 2007)

beachdiddi hat gesagt.:
			
		

> Ist es möglich, dass beim Aufruf eines Programms über die Kommandozeile etwas ausgegeben wird, das nachher wieder gelöscht wird.
> Zum Beispiel den Namen einer Datei, die ein Thread gerade einliest.
> Wenn dieser Thread die nächste Datei einliest, soll der Name von der Ausgabe gelöscht werden (ähnlich dem Clearscreen) und der neue Dateiname soll erscheinen.



Das geht, wenn du dir die Anzahl der in einer Zeile ausgegebenen Zeichen merkst. (String-Länge)
Mit _System.out.print("\b");_ kannst du jeweils ein Zeichen rückwärts löschen.
Mit _System.out.print("\r");_ kannst du an den Anfang der Zeile springen und diese überschreiben.


----------



## beachdiddi (27. Jun 2007)

L-ectron-X hat gesagt.:
			
		

> beachdiddi hat gesagt.:
> 
> 
> 
> ...


Hast Du Dich vielleicht verschrieben? So klappt das nämlich bei mir nicht.


----------



## L-ectron-X (27. Jun 2007)

Nein. Warum?

Beispiel:

```
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();
   }

   //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"); //Zeile löschen
            }
         }
      }
   }
}
```


----------



## beachdiddi (27. Jun 2007)

:applaus: Juhu!

Ich weiß jetzt warum es nicht ging.
Ich darf natürlich vorher nicht 





> System.out.println


 nehmen, sondern so wie Du 





> System.out.print


.

Is ja irgendwie klar, sonst bin ich ja schon wieder in einer neuen Zeile.

Danke L-ectron-X!
Das ist die einfache Art, die ich gesucht habe.


----------

