PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Konsole löschen



Barny
12.12.2011, 11:29
Hiho!
Ich code derzeit an einem kleinen Projekt mit extra Menü, aber ohne wirkliche GUI.
Sprich ich arbeite mit der Konsole in eclipse oder wenn ich es exportiere mit meinem Terminal.

Nun habe ich mein kleines Projekt fertig und möchte jetzt noch ein paar "kosmetische" Veränderungen vornehmen.^^
Beispielsweise stört es mich, dass wenn ich in meinem Menü einen Punkt ausgewählt habe und dieser auch abgearbeitet worden ist, dass das alte Menü mit den alten Eingaben immernoch weiter oben steht und er alles wiederholt ausgibt.

Ich möchte quasi einfach nur den bisherigen Inhalt der Konsole löschen nach jedem Durchlauf.

Google hat mir nicht wirklich sinnvolle Sachen ausgespuckt, denn auf manchen Seiten hieß es "ja es geht" oder widerum "nein geht nicht" aber nirgends eine Begründung oder auch Lösungsvorschläge zu finden.

Ich hoffe mit kann jemand helfen! :)

mfg

Barny

Namphiz
12.12.2011, 13:13
Du musst dafür sorgen, dass auf Windows Systemen der CMD-Befehl "cls" und auf UNIX-Systemen der Befehl "clear" ausgeführt wird.

So würde ich ansetzen.

ReiDC0Re
12.12.2011, 15:32
printf("\033[2J");
oder
clrscr();
oder
system("cls");
Wenn du für Linux Compiles müsstest natürlich entsprechend clear nutzen stadtdessen.

In .net wie c# gehts einfach so.
Console.Clear();


cout << "\33[2J";
geht natürlich auch ;)

Barny
12.12.2011, 17:38
printf("\033[2J");
oder
clrscr();
oder
system("cls");
[...]
In .net wie c# gehts einfach so.
Console.Clear();


cout << "\33[2J";

Danke für die Ansätze, aber das sieht mir doch sehr stark nach C und C++ aus und ich habe bislang keine Ahnung wie ich es in Java umsetzen soll.

Das mit "cls" für Windows und "clear" für Linux (wobei bei mir Linux zutrifft) ist mir klar, jedoch weiß ich nicht wie ich auf mein Terminal direkt zugreifen soll mit Java?
Oder muss ich mich dafür einer anderen Klasse bedienen?

mfg

Barny

Cristhecrusader
12.12.2011, 17:54
final static String ESC = "\033[";
System.out.print(ESC + "2J"); System.out.flush();
Funktioniert aber glaube ich auf NT nicht, ansonsten würd ich einfach so viele \n 's reinmachen bis der Screen wieder leer is.

Barny
12.12.2011, 18:00
Funktioniert leider nicht... :( also Ergebnis bekomme ich lediglich die Ausgabe:
[2Jnach meinem Text...


[...] ansonsten würd ich einfach so viele \n 's reinmachen bis der Screen wieder leer is.

Das hatte ich als Notlösung gedacht! :D Aber es mus sja auch irgendwie anders gehen.

mfg

Barny


//Edit: Ich muss mich korrigieren, denn nach dem exportieren als jar funktioniert es, jedoch nicht in eclipse was mich auch nicht weiter stört! :D Aber interessieren würde es mich trotzdem noch, also falls wer eine Begründung dazu hat und diese teilen möchte, so möge er dies hier tun! Ich wäre ihm sehr verbunden aber an sich ist das Thema geklärt für mich! Big thx!

Cristhecrusader
12.12.2011, 18:09
Ist leider die einzige plattformunabhängige methode die ich kenn, ansonsten kannst du eben die OS funktionen benutzen:
Runtime.getRuntime().exec( insertclearcommandhere ); //inserclearcommandhere="cls" bei windows und "clear bei *Nix.
Edit: Ok, gut, also ich müsst jetzt raten, aber es kann sein dass eclipse eben nicht die standart shell/bash/cmd benutzt und deswegen die ANSI Sequenzen nicht funktionieren.

Bonkers
12.12.2011, 18:25
Die Lösung ist Mist, funktioniert aber.




for (int i=0; i<30; i++)
System.out.println();



Wenn du irgendwie die Lines der Konsole herauskriegst kannst du zumindest die 30 vernünftig anpassen.
Meine Nachforschungen (1 Min ~) zeigen dass auch das nicht ohne weiteres möglich ist.