【问题标题】:How to stop the execution of my java program after i invoke r.exec to start a cmd prompt在我调用 r.exec 以启动 cmd 提示符后如何停止执行我的 java 程序
【发布时间】:2017-10-22 12:42:18
【问题描述】:

在我正在使用的程序中 r.exec(); 启动命令提示符并在其中执行一个 bat 文件。

但是发生的情况是,只要执行了上面的语句,cmd提示符就会启动并执行其中的bat文件。但是,java程序执行不会等到bat文件在提示符中执行。 它启动 cmd 提示符并开始执行其中的 bat 文件,并在 r.exec(); 之后继续执行下一条语句。(同时我的 bat 文件仍在提示符中执行)

我的要求是,java程序必须等到命令提示符中的bat文件执行完毕,而不是继续执行下一条语句。

【问题讨论】:

  • 你的意思是Runtime.exec()?如果是这样,则返回一个Process,您可以等待它完成。如果不是,请澄清r 是什么。
  • 是的,它的 Runtime.exec()。但是我怎么能等到执行完呢?
  • 另请参阅When Runtime.exec() won't,了解有关正确创建和处理流程的许多好技巧。然后忽略它引用exec 并使用ProcessBuilder 来创建进程。还将String arg 拆分为String[] args 以解决包含空格字符的路径之类的问题。

标签: java batch-file command prompt runtime.exec


【解决方案1】:

Runtime.exec 返回一个Process 实例。在该实例上,您可以调用 waitFor() 等待进程完成。

此外,您需要处理Process.getErrorStream()Process.getOutputStream()(通常在单独的线程中),这样当这些缓冲区填满时进程不会阻塞。 ProcessBuilderredirectErrorStream(true) 有一个方便的方法,无需同时处理两个流,然后处理额外的线程。

【讨论】:

    【解决方案2】:

    r.exec("command") 返回Process。从这里您可以简单地输入以下内容:

    Process process = r.exec("command here");
    process.waitFor(); //Waits until process closes
    

    waitFor() 方法将暂停当前线程,直到进程关闭。

    JavadocwaitFor():必要时使当前线程等待,直到此 Process 对象表示的进程终止

    此外,如果您想捕获输入或向控制台发送命令,您可以在单独的线程中使用process.getInputStream()process.getOutputStream()。这将使您可以在批处理文件运行时对其进行监控,因此如果由于某种原因发生故障,您可以取消终止进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-22
      相关资源
      最近更新 更多