从Java执行外部程序(使用cmd、Windows)
我做过很多研究,通过一些简单的代码来执行外部程序(例如iTunes),但是这些建议从来都不起作用。有时什么也没发生,有时我会收到以下错误消息: 我的代码如下:从Java执行外部程序(使用cmd、Windows),java,cmd,external,processbuilder,Java,Cmd,External,Processbuilder,我做过很多研究,通过一些简单的代码来执行外部程序(例如iTunes),但是这些建议从来都不起作用。有时什么也没发生,有时我会收到以下错误消息: 我的代码如下: try { String name = (String) "start " + table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()); ProcessBuilder p = new ProcessBuilder("cmd.exe", "cd
try {
String name = (String) "start " + table.getValueAt(table.getSelectedRow(), table.getSelectedColumn());
ProcessBuilder p = new ProcessBuilder("cmd.exe", "cd /D %HOMEDRIVE%%HOMEPATH%/Desktop", "/c", name);
p.start();
} catch (Exception e) {
e.printStackTrace();
}
在我的示例中,我从一个JTable
获取外部程序的名称,这部分工作正常。ProcessBuilder将首先将目录更改为桌面。然后,外部程序应通过start
命令执行。通过这段代码,我得到了上面提到的错误消息
如果您有使用cmd的解决方案,请包括将目录更改为桌面。您应该将每个参数作为单个条目传递到
ProcessBuilder
。在您当前的代码中,有时会同时使用多个参数(如cd/D%HOME…
)。尝试将每个参数作为自己的参数传递,包括启动命令及其参数:
String name = (String) table.getValueAt(table.getSelectedRow(), table.getSelectedColumn());
ProcessBuilder p = new ProcessBuilder("cmd.exe", "cd", "/D", "%HOMEDRIVE%%HOMEPATH%/Desktop", "/c", "start", name);
根据:
/D忽略注册表自动运行命令
HKLM | HKCU\Software\Microsoft\Command Processor\AutoRun
你是说start.exe/D
不是cmd.exe/D
他们还说
如果指定了/C或/K,那么命令行的其余部分将作为新shell中的立即命令处理。如果用引号括起来,则接受由命令分隔符“&”或“&&”分隔的多个命令
你是说
cmd.exe/C“cd%HOMEDRIVE%%HOMEPATH%\Desktop&Discord”
有关设置工作目录的更好方法,请参阅。如果不工作,则会出现相同的错误消息。