Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Ripulire la console

  1. #1

    Ripulire la console

    ciao!

    ho un problema stupido, ma vedo che fanno tutti così quindi non capisco.
    avrei bisogno di ripulire la console da programma.
    ho quindi semplicemente creato questo:
    codice:
    public class ClearConsole {
    
        public static void clearConsole() throws IOException {
            final String os = System.getProperty("os.name");
            if (os.contains("Windows")) {
                Runtime.getRuntime().exec("cls");
            } else {
                Runtime.getRuntime().exec("clear");
            }
        }
    }
    solo che su windows 7 mi esce fuori questo errore:
    codice:
    Cannot run program "cls": CreateProcess error=2, Impossibile trovare il file specificato
    sinceramente non capisco.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    solo che su windows 7 mi esce fuori questo errore:
    codice:
    Cannot run program "cls": CreateProcess error=2, Impossibile trovare il file specificato
    sinceramente non capisco.
    Su Windows (su altri SO non ho idea al momento), il "cls" è una istruzione della shell ... non un "eseguibile" .exe (o ciò che il sistema ritiene eseguibile). Gli exec() possono solo lanciare eseguibili!

    Anche se lanciassi la shell (sui Windows da NT in poi è cmd.exe) e gli passassi il comando "cls":

    Runtime.getRuntime().exec("cmd.exe /C cls");

    non otterresti il risultato voluto, perché il nuovo processo è slegato dalla console che è collegata al processo della tua applicazione (e gli stream di std-in/out/err sono rediretti verso l'applicazione ... appunto non verso la console reale che hai).

    Questo però funziona, l'ho provato adesso:

    codice:
    ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "cls");
    pb.inheritIO().start();
    grazie al inheritIO() (solo da Java 7 però).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    funziona.
    grazie!

    ho però un piccolo problema che non riesco a decifrare.
    questo il codice:
    codice:
        public static void main(String[] args) {
            Timer timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
    
                @Override
                public void run() {
                    try {
                        ClearConsole.clearConsole();
                        System.out.println("STARTED");
                        MyGmail mb = new MyGmail();
                        mb.getEmailsNotRead("imap", "imap.gmail.com", "993", "", "");
                        System.out.println("....................");
                        System.out.println("END");
                    } catch (MessagingException | IOException ex) {
                        System.out.println(ex.getMessage());
                    }
                }
            }, 0, 120000);
        }
    quello che all'avvio, è che prima viene scritto STARTED sulla console, e poi pulita.
    sinceramente non so se è un problema del timer o del codice di pulizia.
    che ne dici?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da fermat Visualizza il messaggio
    è che prima viene scritto STARTED sulla console, e poi pulita.
    Gli exec() (o start() di ProcessBuilder) avviano il processo in maniera "asincrona". In altre parole exec/start sono quasi istantanei. E il processo lanciato va per conto suo. Quindi nel tuo caso è perfettamente possibile che il println appena successivo venga in realtà eseguito prima che il processo lanciato arrivi a pulire la console.

    Usa waitFor() sul Process.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    adesso funziona perfettamente.
    una miniera di informazioni come al solito.
    grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.