2012-06-08 16 views
8

Próbuję uruchomić aplikację CMD w systemie Windows przy użyciu następującego kodu, ale nie działa zgodnie z oczekiwaniami. Kilka przykładów z różnych stron internetowych pokazuje, że "cmd" jako argument w konstrukcji ProcessBuilder powinno działać.Start CMD przy użyciu ProcessBuilder

Co muszę zrobić, aby moja aplikacja Java otworzyła aplikację CMD w systemie 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()); 
     } 
    } 
} 

Kiedy próbuję używać non-istniejącej aplikacji faktycznie wypisuje błąd, więc to znaczy, że faktycznie działa „CMD”. Ale aplikacja CMD nie pojawia się zgodnie z oczekiwaniami?

+1

Jeśli nazywa swoje auto mechanik i powiedział: „mój samochód nie działa”, co by jego pierwsze pytanie będzie? Jeśli nie powiesz nam, co było komunikatem o błędzie, w jaki sposób spodziewasz się uzyskać pomoc? –

+2

Przed skokiem z fantazyjnym komentarzem, spróbuj przeczytać, co mówi OP. _to oznacza to, że faktycznie działa "CMD". Ale aplikacja CMD nie pojawia się zgodnie z oczekiwaniami? _ –

Odpowiedz

7

Musisz użyć polecenia start. W rzeczywistości nawet ja nie widzę nowego wiersza poleceń, ale możesz sprawdzić, czy nowy cmd.exe jest zdecydowanie uruchomiony przy użyciu twojego task manager.

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

Choć ta sama funkcjonalność może zostać osiągnięty za pomocą Runtime.exec(), a to rzeczywiście pojawia się nowy wiersz polecenia.

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

ProcessBuilder nie działa zgodnie z oczekiwaniami (co uważam za bardzo, bardzo dziwne) - Ale metoda "exec()" wykonuje to zadanie. Dziękuję Ci! – Birdman

+0

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

+0

Nie wiem co/C oznacza?, Nie jest to ścieżka napędu C – john

12

go używać z ProcessBuilder trzeba oddzielić poleceń tak:

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

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