Avatar billede royalexport Nybegynder
02. august 2002 - 23:14 Der er 17 kommentarer

Tekstbaseret ClearScreen

Findes der en metode til at slette skærmen i Java? Jeg tænker ikke i GUI, men på ren tekstbaseret skærm.
Avatar billede olly Nybegynder
03. august 2002 - 20:23 #1
Ja det er lykkes mig med et JNI kald til en dll kodet i c/c++... Men du kan så vidt jeg ved ikke køre systemkomandoer fra Java!
Avatar billede jakoba Nybegynder
03. august 2002 - 20:43 #2
i gamle dage understøttede DOS vinduer ansi kontrol sekvenserne
http://vt100.net/docs/vt100-ug/chapter3.html#S3.3.3

prøv med:
// HVP -- Horizontal and Vertical Position
    ESC [ Pn ; Pn f
// Erase to End of Screen
    ESC J
går til øverste venstre hjørne og sletter så derfra (alt)

men jeg ved ærligtalt ikke om det duer til et java-vindue. prøv

mvh JakobA
Avatar billede zhy Nybegynder
04. august 2002 - 08:56 #3
Kan du ikke bare lave metoden selv ?

en for-løkke men en bunke tomme println ??
Avatar billede carstenknudsen Nybegynder
04. august 2002 - 11:12 #4
olly: man kan godt køre system kommandoer
fra Java, men det er naturligvis ikke en
løsning der virker alle steder da de
afhænger af operativsystemet:
Runtime.getRuntime().exec( "ls *" );
Avatar billede jakoba Nybegynder
04. august 2002 - 11:43 #5
Det man sådan styrer via runtime skal vist helst være noget der ikke er 'ejet' af java-programmet (der bliver i de fleste OS'er sat properties for at undgå det kan ske).
Avatar billede royalexport Nybegynder
04. august 2002 - 12:05 #6
Jeg har selv fundet en metode, som sletter skærmen. En escape karakter, som virker i DOS/Windows i hvert fald.
public void clSc()
{
  System.out.println("\033c");
}
Avatar billede olly Nybegynder
04. august 2002 - 13:11 #7
carstenknudsen

Jeg har hvert fald ikke kunne få exec("CLS") til at virke i Windows! Og den her


System.out.println("\033c");

Virker også kun i Windows hvis den virker!

Har testet den på min linuxbox! Virker ikke! Men det gør et jni kald!
Avatar billede jakoba Nybegynder
04. august 2002 - 13:33 #8
prøv med:

public void clScreenAnsi() {
    System.out.println("\033[1;1f\033J");
}
der er større sandsynlighev for at den virker i Linux, unix osv
PS: jeg tror linie/bogstavnumre starter fra 1; men hvis øverste linie ikke slettes skal det være:

    System.out.println("\033[0;0f\033J");

hvis den ikke virker i windows skal der evt sendes en "\033<" først. Eller bare din "\033c" istedet

mvh JakobA
Avatar billede carstenknudsen Nybegynder
05. august 2002 - 10:08 #9
olly: hvis cls sletter et vindue i dos/windows skulle
det virke, den eneste årsag til at det ikke skulle virke
er hvis ikke du har startet programmet fra en dos shell,
men fra et eller andet environment. For at se hvad
der er galt kan du tilføje følgende kode:
Process p = Runtime.getRuntime().exec( "cls" );                         
InputStream pin = p.getErrorStream();                           
InputStreamReader cin = new InputStreamReader( pin );                           
BufferedReader in = new BufferedReader( cin );                           
String s;                           
if ( ( s = in.readLine() ) != null ) {                               
System.out.println( "Det virkede ikke");                               
System.out.println( s );                               
while ( ( s = in.readLine() ) != null ) {                                   
System.out.println( s );                               
}                           
}                           
else {                               
System.out.println( "Det virkede." );                           
}
Avatar billede olly Nybegynder
05. august 2002 - 13:11 #10
Carsten:

Det var startet fra dos... Naturligvis under NT4/Win2k/XP da jeg ikke vil røre det lort til win9x (Og helst slet ikke Windows). Og der virker det ikke!
Avatar billede carstenknudsen Nybegynder
05. august 2002 - 13:22 #11
olly:
du kan altså skrive cls i din shell og den slettet skærmen?
Men hvis du kører ovenstående får du ikke nogen fejlbesked
skrevet ud?
Avatar billede olly Nybegynder
10. august 2002 - 13:51 #12
carsten:
java.io.IOException: CreateProcess: cls error=2

Den er den fejl jeg får når jeg tilføjer de manglende try-catch til din kode. Og jf. java.sun.com er der fordi du ikke kan kører interne doskomandoer med exec.
Avatar billede carstenknudsen Nybegynder
10. august 2002 - 14:26 #13
olly: det var jo ikke så godt. Så må
du nok forsøge at smide nogle escape
karakterer ud som foreslået ovenfor,
men det vil næppe være garanteret til
at virke alle steder.
Avatar billede olly Nybegynder
10. august 2002 - 22:42 #14
carsetn...

Jeg er ligeglad... Hvis jeg har brug for det klader jeg den via jni... Det virker 100% og også på de platforme jeg har testet! (Linux og WinXP/2000).
Avatar billede royalexport Nybegynder
14. august 2002 - 19:18 #15
Jeg lukker spørgsmålet her, det var åbenbart sværre end jeg lige havde regnet med.
Avatar billede carstenknudsen Nybegynder
14. august 2002 - 20:24 #16
Det er nu ikke fordi spørgsmålet er
så svært, men der findes ikke en enkelt
løsning der er platformsuafhængig, ikke
mindst fordi der i nogle tilfælde ikke
er en konsol forbundet med en kørende process.
Avatar billede royalexport Nybegynder
04. juni 2004 - 10:29 #17
lukkes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester