2009-11-05 17 views

Odpowiedz

10

Jak brudne sztuczki iść, lubię rozwiązanie msparer użytkownika. Jeszcze bardziej brudna metoda, którą widziałem, używana (nigdy bym tego nie zrobiła, przysięgam, naprawdę.) Jest napisanie paczki nowych linii do konsoli. Nie powoduje to wyczyszczenia ekranu, ale tworzy iluzję wyraźnego ekranu dla użytkownika.

char c = '\n'; 
int length = 25; 
char[] chars = new char[length]; 
Arrays.fill(chars, c); 
System.out.print(String.valueOf(chars)); 
+2

Nie odważyłem się napisać tę odpowiedź w dół. Nice :-) – LB40

+0

@LB: Przyznaję, że jest to prawdopodobnie * najgorszy * sposób na zrobienie tego. Czasami po prostu musisz podzielić się swoimi WTF. :) –

+3

Jak to jest inne niż 'System.out.print ("\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n n \ n ");' co oznacza jedną linię zamiast pięciu? – Tenner

7

Jeśli mówisz o konsoli, to nie. Zapisywanie na konsoli jest tylko specjalnym przypadkiem strumienia wyjściowego. Strumienie wyjściowe nie wiedzą nic o ekranie, ponieważ mogą być równie łatwo przekierowane do pliku lub innego urządzenia systemowego.

7

Jeśli mówisz o aplikacji konsoli, to nie ma wyraźnej opcji ekranu AFAIK. A dość brudna opcja to wywołanie polecenia "clear screen" bazowego systemu operacyjnego.

Wtedy to coś

Runtime.getRuntime().exec("cls"); 

dla Windows lub

Runtime.getRuntime().exec("clear"); 

dla obciążenia innego systemu operacyjnego. Możesz dowiedzieć się, OS z System.getProperty("os.name").

+0

'dirty' very' dirty': D –

+2

to nie działa. próbowałem w systemie Windows XP. – user161004

+5

Myślę, że 'cls' jest wbudowaną funkcją, a nie rzeczywistym plikiem wykonywalnym. –

0

W przypadku systemu Windows projekt Java Console API zapewnia funkcję określania wielkości konsoli i ustawiania pozycji kursora. Czyszczenie ekranu jest trywialne. Jest to wersja 0.2, więc nie jest to dokładnie produkcja gotowa, ale działa.

Alternatywnie możesz po prostu wydrukować kilka nowych linii przez System.out.println(). 640 powinno wystarczyć każdemu :-) To nie jest to samo, co czyszczenie ekranu, ale z intencją użytkownika i jego celami.

5

na Linuksie, można zrobić coś takiego:

System.out.println("\f"); 

Można również użyć Jcurses

5

Dla każdej konsoli obsługującej znaki kontrolne ANSI następowałaby praca (mogłaby np. Działać na konsoli Win98).

private final String ANSI_CLS = "\u001b[2J"; 
.... 
System.out.print(ANSI_CLS); 
System.out.flush(); 
... 

Wychodząc z Win NT nie będą już działać i można albo

Inaczej jesteś pecha.

I btw. należy pamiętać, że System.out i System.err nie muszą być konsolami, w których można ustawić dowolne (np. Zapisanie w pliku) przypadek, w którym czyszczenie ekranu nie miałoby żadnego sensu.

+0

+1 Niesamowita poprawna odpowiedź. –

0

powinieneś spróbować z JNA i spróbuj mapowanie natywne biblioteki:

  • w systemie Linux należy odwzorować funkcje C ncurses bibliotecznych
  • na oknach należy odwzorować funkcje zarówno MSVCRT i Kernel32, jak wyraźnie zaznaczono here

PS

daj mi wiadomo, czy trzeba przykładowy kod

3

Aby wyczyścić ekran po prostu wpisać:

System.out.print('\u000C'); 
+0

Nie działa dla mnie na Windows – paullb

2

Można także spróbować ANSI Ucieczka Kody:

Jeśli twój terminal wspierać je, spróbuj coś takiego:

System.out.print("\033[2J\033[1;1H"); 

Możesz dołączyć \0333[1;1H być pewien, czy \0333[2J nie przesuwa kursor w lewym górnym lewy róg.

Dokładniej:

  • 033 jest ósemkowa z ESC
  • 2J jest oczyszczenie całej konsoli/ekranu terminala
  • 1;1H przemieszcza kursor do rzędu 1 i kolumny 1
+0

Jest to jedyne rozwiązanie ANSI, które konsekwentnie działa w moim terminalu linuksowym. Zwłaszcza przesunięcie kursora na końcu sprawia, że ​​wygląda ładnie i czysto. Ponadto respektuje wielkość (wysokość) okna. –