繁体   English   中英

使用Runtime.getRuntime()。exec无法打开命令提示符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM