2012-06-08 11 views
8

Sto cercando di avviare l'applicazione CMD in Windows utilizzando il codice seguente, ma non funziona come previsto. Diversi esempi da diversi siti Web mostrano che "cmd" come argomento nel costrutto ProcessBuilder dovrebbe funzionare.Avvia CMD utilizzando ProcessBuilder

Cosa devo fare per far aprire la mia app Java all'applicazione CMD in Windows?

public class JavaTest 
{ 
    public static void main(String[] args) 
    { 
     ProcessBuilder pb = new ProcessBuilder("cmd"); 

     try 
     { 
      pb.start(); 
      System.out.println("cmd started"); 
     } 
     catch (IOException e) 
     { 
      System.out.println(e.getMessage()); 
     } 
    } 
} 

Quando si tenta di utilizzare un'applicazione inesistente in realtà viene stampato un errore, in modo che significa in realtà corre "CMD". Ma l'applicazione CMD non compare come previsto?

+1

Se è stato chiamato un meccanico auto e ha detto "la mia macchina non funziona", quale sarebbe la sua prima domanda è? Se non ci dici qual è il messaggio di errore, come prevedi di ricevere aiuto? –

+2

Prima di saltare con un commento di fantasia, prova a leggere cosa dice l'OP. Questo significa che esegue effettivamente "CMD". Ma l'applicazione CMD non compare come previsto? _ –

risposta

7

È necessario utilizzare il comando start. In realtà, anche io non vedo spuntare un nuovo prompt dei comandi, ma puoi verificare che un nuovo sia avviato definitivamente usando il tuo task manager.

ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "start"); 

Sebbene, la stessa funzionalità può essere ottenuta utilizzando Runtime.exec(), e questo fatto apre una nuova riga di comando.

Runtime.getRuntime().exec("cmd.exe /C start"); 
+0

ProcessBuilder non funziona come previsto (che trovo molto, molto strano) - Ma il metodo "exec()" fa il lavoro. Grazie! – Birdman

+0

Stringa [] cmd = new String [] {"cmd.exe", "/ C", "start"}; ProcessBuilder pb = new ProcessBuilder (cmd); Process process = pb.start(); – user77115

+0

Non so cosa/C significa?, Non è il percorso del drive C – john

12

usarlo con ProcessBuilder è necessario separare i comandi come questo:

final List<String> commands = new ArrayList<String>();     

commands.add("cmd.exe"); 
commands.add("/C"); 
commands.add("start"); 
ProcessBuilder pb = new ProcessBuilder(commands); 
pb.start();