2012-06-08 41 views
8

Tôi đang cố gắng khởi động ứng dụng CMD trong các cửa sổ bằng cách sử dụng mã sau đây, nhưng nó không hoạt động như mong đợi. Một số ví dụ từ các trang web khác nhau cho thấy rằng "cmd" như một đối số trong cấu trúc ProcessBuilder sẽ hoạt động.Bắt đầu CMD bằng cách sử dụng ProcessBuilder

Tôi phải làm gì để ứng dụng Java của mình mở ứng dụng CMD trong cửa sổ?

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

Khi tôi cố gắng sử dụng ứng dụng không tồn tại, nó thực sự in ra lỗi, điều đó có nghĩa là nó thực sự chạy "CMD". Nhưng ứng dụng CMD không bật lên như mong đợi?

+1

Nếu bạn gọi thợ sửa ô tô của bạn và nói "xe của tôi không hoạt động", điều gì sẽ câu hỏi đầu tiên của ông là gì? Nếu bạn không cho chúng tôi biết thông báo lỗi là gì, bạn mong đợi như thế nào để nhận được bất kỳ trợ giúp nào? –

+2

Trước khi nhảy lên với một bình luận ưa thích, hãy thử đọc những gì OP nói. có nghĩa là nó thực sự chạy "CMD". Nhưng ứng dụng CMD không bật lên như mong đợi? _ –

Trả lời

7

Bạn cần sử dụng lệnh start. Trên thực tế, ngay cả khi tôi không thấy dấu nhắc lệnh mới xuất hiện, nhưng bạn có thể kiểm tra xem cmd.exe mới chắc chắn đã bắt đầu sử dụng số task manager của bạn chưa.

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

Tuy nhiên, chức năng tương tự có thể đạt được bằng cách sử dụng Runtime.exec() và điều này thực sự bật lên một dấu nhắc lệnh mới.

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

ProcessBuilder không hoạt động như mong đợi (Tôi thấy rất, rất lạ) - Nhưng phương thức "exec()" thực hiện công việc. Cảm ơn bạn! – Birdman

+0

Chuỗi [] cmd = Chuỗi mới [] {"cmd.exe", "/ C", "bắt đầu"}; ProcessBuilder pb = new ProcessBuilder (cmd); Quy trình xử lý = pb.start(); – user77115

+0

Tôi không biết ý nghĩa của từ/C, đó không phải là đường dẫn của ổ đĩa C – john

12

Để sử dụng nó với ProcessBuilder bạn phải tách các lệnh như thế này:

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

commands.add("cmd.exe"); 
commands.add("/C"); 
commands.add("start"); 
ProcessBuilder pb = new ProcessBuilder(commands); 
pb.start(); 
Các vấn đề liên quan