[英]Command prompt doesn't open with Runtime.getRuntime().exec
我创建了一个GUI(swing),该GUI执行一个批处理文件,该批处理文件包含带有特定参数的命令提示符.exe文件执行。 当我手动运行批处理文件(通过双击它)时,一切都按预期进行。 问题是:命令提示符窗口不会打开以显示进度,而且,直到我退出GUI(派生?),它才真正开始工作(仅启动)。 当它开始工作时,它在后台某处工作,并且仅在任务管理器中可见。 仅打开一个空白的命令提示符窗口。
通过深入研究,我构建了此命令,该命令的效果与上述相同:
Runtime.getRuntime().exec("cmd.exe /c start \"Encoding\" cmd.exe /c start md \"" + Gui.outputDirField.getText() + "\\encoderOutput\" & cd \"" + Gui.outputDirField.getText() + "\\encoderOutput\" & \"" + Gui._batFile + "\" & pause");
你能帮忙吗?
抱歉,听起来很蠢。
这种方式对我有用:
new Thread() {
@Override public void run() {
try {
Runtime.getRuntime().exec("cmd.exe /c start " + Gui._batFile);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}.run();
垃圾神可能出事了。 我们遇到了空间路径问题。 摘自JRE 7u21的发行说明
对Runtime.exec的更改
在Windows平台上,改进了对指定给Runtime.exec(String)
, Runtime.exec(String,String[])
和Runtime.exec(String,String[],File)
方法的命令字符串的解码,以符合规范更紧密。 对于使用这些方法中的一种或多种与程序名称中包含空格的命令,或者使用未正确引用的命令调用这些方法的应用程序,可能会导致问题。
例如, Runtime.getRuntime().exec("C:\\\\My Programs\\\\foo.exe bar")
试图启动带有参数"Programs\\\\foo.exe"
"C:\\\\My"
的程序"C:\\\\My"
"Programs\\\\foo.exe"
和"bar"
。 该命令可能会失败,并带有一个异常,指示找不到"C:\\My"
。
示例Runtime.getRuntime().exec("\\"C:\\\\My Programs\\\\foo.exe\\" bar")
试图启动程序"\\"C:\\\\My"
。此命令将失败表示程序具有嵌入式引号的例外。
需要启动程序名称中带有空格的程序的应用程序应考虑使用Runtime.exec
的变体,该变体允许在数组中指定命令和参数。
另外,由于JDK 5.0使用java.lang.ProcessBuilder
,因此是创建操作系统进程的首选方法。 ProcessBuilder
类具有更完整的API,用于设置环境,工作目录和重定向流程流。
bat文件是否需要用户交互,或者为什么要暂停命令? 如果是这样,则Runtime.exec只会在没有窗口的情况下运行文件,为什么要使用Window? 您可以从exec获得一个Process对象,从该对象可以获取InputStream(如果需要,可以获取OutputStream),以便可以打印输出或与流程进行交互。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.