在我调用 r.exec 以启动 cmd 提示符后如何停止执行我的 java 程序

Posted

技术标签:

【中文标题】在我调用 r.exec 以启动 cmd 提示符后如何停止执行我的 java 程序【英文标题】:How to stop the execution of my java program after i invoke r.exec to start a cmd prompt 【发布时间】: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 以解决包含空格字符的路径之类的问题。 【参考方案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()。这将使您可以在批处理文件运行时对其进行监控,因此如果由于某种原因发生故障,您可以取消终止进程。

【讨论】:

以上是关于在我调用 r.exec 以启动 cmd 提示符后如何停止执行我的 java 程序的主要内容,如果未能解决你的问题,请参考以下文章

敲啥命令可以以管理员身份启动cmd

求cmd命令大全。谢谢各位电脑大虾。。。。

命令提示符启动不了mysql,提示发生系统错误 5。拒绝访问。

在运行窗口如何启动MySQL?

win 10怎么以管理员权限启动bat脚本

如何让cmd启动始终以管理员身份运行(方法已失效)