Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    26

    [Java] Aprire shell dos

    Ciao a tutti,

    ho un problema che dovrebbe essere molto facile da affrontare, ma che non riesco proprio a risolvere.
    Voglio semplicemente fare in modo che da Java si apra la classica shell di dos.
    Ho scritto il seguente codice:

    try {
    Runtime rt = Runtime.getRuntime();
    Process proc = rt.exec("cmd");
    }
    catch (Exception e){
    }

    Ma la finestra di dos non si apre!!
    Dove sbaglio?

    Grazie mille!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [Java] Aprire shell dos

    Originariamente inviato da edomatch
    Voglio semplicemente fare in modo che da Java si apra la classica shell di dos.
    rt.exec(new String[] { "cmd", "/C", "start", "cmd" });
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2002
    Messaggi
    26
    Perfetto, grazie mille!!!!!

  4. #4

    eseguire comandi shell

    Anch'io mi trovo in una situazione simile, oltre ad aprire la shell dos dovrei eseguire dei comandi dalla shell aperta, come posso fare?
    Grazie

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Utilizzando l'oggetto Process generato dalla exec() per recuperare l'OutputStream.

    Attraverso l'OutputStream puoi comunicare con il processo (la shell) e quindi guidarla...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    18
    Ciao, ho quasi lo stesso problema di edomatch, ma con qualche variante. Praticamente:
    ho un Interprete scritto in Pascal che gira su shell dos (si comporta come fosse a sua volta una shell, chiede un espressione in input e restituisce un output o errore) e devo costruirci un'interfaccia grafica. Volevo utilizzare Java perché con Netbeans mi trovo molto bene e posso costruire l'interfaccia in un attimo. Ora il problema è che utilizzando la funzione Runtime.getRuntime().exec() ottengo un errore su ntvdm.exe (NT Virtual Dos Machine) (errore impostando l'ambiente per l'applicazione) questo nonostante il fatto che se avvio il programma da un normale Prompt dei Comandi l'Interprete funzioni correttamente.
    Così ho pensato di lanciare prima la Shell Dos e successivamente fargli richiamare l'interprete, ma sembra non funzionare: quando mando comandi li riceve la shell e non il mio interprete, come posso fare?

    Posto un semplice codice di esempio:

    codice:
    import java.io.*;
    import java.util.logging.*;
    
    public class Main
    {
        public static void main (String[] args) {
            try {
                String[] cmd = new String[4];
                cmd[0] = "cmd.exe";
                cmd[1] = "/K";
                cmd[2] = "start";
                cmd[3] = "G:\\Pascal\\GalileoWin\\Build\\Galileo.exe";
    
                Process p = Runtime.getRuntime().exec(cmd);
    
                PrintWriter pw = new PrintWriter(
                        new OutputStreamWriter(p.getOutputStream()));
                pw.println("3+3;"); // erroneamente eseguito dalla shell e non dall'interprete
                pw.close();
    
                BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
                String linea = br.readLine();
                while (linea != null) {
                    System.out.println(linea);
                    linea = br.readLine();
                }
                br.close();
    
                p.destroy();
    
            } catch (IOException ex) {
                Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    se qualcuno riesce ad aiutarmi o almeno a dirmi qualcosa....grazie.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Stampede
    Così ho pensato di lanciare prima la Shell Dos e successivamente fargli richiamare l'interprete, ma sembra non funzionare: quando mando comandi li riceve la shell e non il mio interprete, come posso fare?
    Togli 'start' e usa /C invece di /K
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    18
    In questo caso non ottengo nessun output, il che è sbagliato perché anche alla prima esecuzione l'interprete presenta un prompt.

  9. #9
    potete spiegarmi cosa fanno gli argomenti della Stringa?
    rt.exec(new String[] { "cmd", "/C", "start", "cmd" });


    ho aggiunto per provare anche "/C","ipconfig"
    solo che poi non rimane bloccata la schermata ma si chiude....

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.