【问题标题】:Start CMD by using ProcessBuilder使用 ProcessBuilder 启动 CMD
【发布时间】:2012-06-08 18:28:41
【问题描述】:

我正在尝试使用以下代码在 Windows 中启动 CMD 应用程序,但它没有按预期工作。来自不同网站的几个示例表明,“cmd”作为 ProcessBuilder 构造中的参数应该可以工作。

我必须做些什么才能让我的 Java 应用程序在 Windows 中打开 CMD 应用程序?

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

当我尝试使用一个不存在的应用程序时,它实际上会打印出一个错误,这意味着它实际上运行的是“CMD”。但是 CMD 应用程序没有按预期弹出?

【问题讨论】:

  • 如果你打电话给你的汽车修理工说“我的车坏了”,他的第一个问题会是什么?如果您不告诉我们错误消息是什么,您希望如何获得任何帮助?
  • 在发表花哨的评论之前,请尝试阅读 OP 所说的内容。 这意味着它实际上运行“CMD”。但是 CMD 应用程序没有按预期弹出?

标签: java cmd runtime.exec processbuilder


【解决方案1】:

要将它与 ProcessBuilder 一起使用,您必须像这样分隔命令:

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

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

【讨论】:

    【解决方案2】:

    您需要使用start 命令。实际上,即使我没有看到弹出新的命令提示符,但是您可以使用您的task manager 来检查是否确实启动了新的cmd.exe。

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

    不过,使用Runtime.exec() 可以实现相同的功能,这实际上会弹出一个新的命令提示符。

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

    【讨论】:

    • ProcessBuilder 不能按预期工作(我觉得非常非常奇怪) - 但是“exec()”方法可以完成这项工作。谢谢!
    • String[] cmd = new String[]{"cmd.exe", "/C", "start"}; ProcessBuilder pb = new ProcessBuilder(cmd);进程进程 = pb.start();
    • 不知道/C是什么意思,不是C盘的路径
    【解决方案3】:

    如果你是 Windows,请使用此命令

    ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "ping -n 3 google.com");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      相关资源
      最近更新 更多