PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Java]Wagenrücklauf?


Arokh
2007-07-17, 00:45:25
Hi Leute,

ich möchte in ein Java-Programm eine fps-Anzeige auf der Kommandozeile einbauen. Dabei soll die aktuelle Anzeige aber nicht jeweils in eine neue Zeile geschrieben werden, sondern die alte überschreiben. In C würde ich das folgendermaßen realisieren:

int frames;
// frames berechnen...
printf("%i fps\r", frames);

Das Wagenrücklaufzeichen '\r' bewirkt, das nach jeder fps-Ausgabe an den Anfang der Zeile zurückgesprungen wird und bei der nächsten Ausgabe die bisherige überschrieben wird.

Ich weiß aber nicht, wie in das Java hinbekommen kann. Ich habe folgende Variante ausprobiert:

System.out.print(String.valueOf(frames)+" fps\r");

die aber nur bewirkt, daß jeweils in die nächste Zeile gesprungen wird statt an den Anfang der aktuellen zurück.
Ich hab auch schon das hier versucht:

System.out.printf("%i fps\r", new Object[] { new Integer(frames) });

das aber überhaupt nicht funktioniert (überhaupt keine Kommandozeilen-Ausgabe).

Gnafoo
2007-07-17, 14:24:43
Ich kenne mich mit Java nicht aus, aber Macs benutzen „\r“ für eine neue Zeile. Ich könnte mir also vorstellen, dass Java das automatisch in das entsprechende Zeilensprung-Zeichen der aktuellen Plattform übersetzt. D. h. „\n“ unter Linux und „\r\n“ unter Windows.

Ich würde es einmal mit der write-Methode [1] probieren, die scheint keine Konversionen durchzuführen. Ist zwar umständlich, aber vielleicht hilft das ja. ;)

[1] http://java.sun.com/j2se/1.4.2/docs/api/java/io/PrintStream.html

Arokh
2007-07-17, 15:02:58
ich hab gerade herausgefunden: die Lösung
System.out.print(String.valueOf(frames)+" fps\r");
funktioniert tatsächlich, aber nur wenn man das Programm auch wirklich von der Kommandozeile aus startet. Ich hab's erst immer von Eclipse aus gestartet und mir die Ausgabe im Konsolenfenster anzeigen lassen, und da sieht's tatsächlich anders aus.

HellHorse
2007-07-17, 19:26:23
Java kennt übrigens auch printf. :ugly: