2012-06-08 16 views
8

Ich versuche, die CMD-Anwendung in Windows mit dem folgenden Code zu starten, aber es funktioniert nicht wie erwartet. Mehrere Beispiele von verschiedenen Websites zeigen, dass "cmd" als Argument im ProcessBuilder-Konstrukt funktionieren sollte.Starten Sie CMD mit ProcessBuilder

Was muss ich tun, damit meine Java-Anwendung die CMD-Anwendung in Windows öffnet?

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()); 
     } 
    } 
} 

Wenn ich versuche, eine nicht vorhandene Anwendung zu verwenden, um es druckt tatsächlich einen Fehler, so dass heißt, es tatsächlich läuft „CMD“. Aber die CMD-Anwendung erscheint nicht wie erwartet?

+1

Wenn Sie Ihr Automechaniker angerufen und gesagt, „mein Auto nicht funktioniert“, was wäre seine erste Frage sein? Wenn Sie uns nicht sagen, was die Fehlermeldung war, wie erwarten Sie Hilfe? –

+2

Bevor Sie mit einem ausgefallenen Kommentar aufspringen, versuchen Sie zu lesen, was das OP sagt. Das heißt, es läuft tatsächlich "CMD". Aber die CMD-Anwendung erscheint nicht wie erwartet? _ –

Antwort

7

Sie müssen den Befehl start verwenden. Eigentlich sehe ich auch keine neue Eingabeaufforderung, aber Sie können überprüfen, ob ein neuer cmd.exe definitiv mit Ihrer task manager gestartet wurde.

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

Obwohl die gleiche Funktionalität kann mit Runtime.exec() erreicht werden, und dies erscheint tatsächlich eine neue Eingabeaufforderung auf.

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

Der ProcessBuilder funktioniert nicht wie erwartet (Was ich sehr, sehr seltsam finde) - Aber die "exec()" Methode macht den Job. Vielen Dank! – Birdman

+0

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

+0

Ich weiß nicht, was/C bedeuten?, Es ist nicht der Pfad von C Laufwerk – john

12

Um es mit Processbuilder verwenden Sie die Befehle wie folgt trennen müssen:

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

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