2012-06-08 20 views
8

Estoy intentando iniciar la aplicación CMD en Windows utilizando el siguiente código, pero no funciona como se esperaba. Varios ejemplos de diferentes sitios web muestran que "cmd" como argumento en la construcción ProcessBuilder debería funcionar.Inicie CMD utilizando ProcessBuilder

¿Qué tengo que hacer para que mi aplicación Java abra la aplicación CMD en 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()); 
     } 
    } 
} 

Cuando trato de utilizar una aplicación no-existente que realmente muestre un error, lo que significa que en realidad se ejecuta "CMD". Pero la aplicación CMD no aparece como se esperaba?

+1

Si llamó a su mecánico de automóviles y dijo "mi coche no funciona", lo que sería su primera pregunta será? Si no nos dice cuál fue el mensaje de error, ¿cómo espera obtener ayuda? –

+2

Antes de saltar con un comentario elegante, intente leer lo que dice el OP. _so significa que realmente ejecuta "CMD". Pero la aplicación CMD no aparece como se esperaba? _ –

Respuesta

7

Debe usar el comando start. En realidad, incluso no veo un nuevo símbolo del sistema apareciendo, pero puede verificar que un nuevo cmd.exe definitivamente haya comenzado a usar su task manager.

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

Sin embargo, la misma funcionalidad se puede lograr utilizando Runtime.exec(), y esto en realidad aparece un nuevo símbolo del sistema.

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

ProcessBuilder no funciona como se esperaba (lo que me parece muy, muy extraño) - Pero el método "exec()" hace el trabajo. ¡Gracias! – Birdman

+0

String [] cmd = new String [] {"cmd.exe", "/ C", "start"}; ProcessBuilder pb = new ProcessBuilder (cmd); Proceso de proceso = pb.start(); – user77115

+0

No sé qué/C significa?, No es la ruta de la unidad C – john

12

usarlo con ProcessBuilder debe separar los comandos como este:

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

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