从Java执行外部程序(使用cmd,Windows)

时间:2017-07-09 08:46:58

标签: java cmd external processbuilder

我已经通过一些简单的代码完成了许多关于执行外部程序(例如iTunes)的研究,但这些建议从未奏效。有时没有发生任何事情,有时我收到此错误消息: English: Unable to find "Discord". Be sure the name is written correctly and try again.

我的代码如下:

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 <program name>命令执行。使用此代码,我收到了上述错误消息。

如果您有cmd解决方案,请包括将目录更改为桌面。

2 个答案:

答案 0 :(得分:2)

您应该将每个参数作为单个条目传递给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);

答案 1 :(得分:0)

根据:cmd.exe

  

/ D忽略注册表AutoRun命令             HKLM | HKCU \ Software \ Microsoft \ Command Processor \ AutoRun

您的意思是import React from 'react' import { render } from 'react-dom' import { Provider as ReduxProvider } from 'react-redux' import { Provider as FelaProvider } from 'react-fela' import { createStore } from 'redux' import todoApp from './reducers' import App from './components/App' let store = createStore(todoApp) render( <ReduxProvider store={store}> <FelaProvider> <App /> </FelaProvider> </ReduxProvider>, document.getElementById('root') ) 不是start.exe /D吗?

并且他们也告诉了

  

如果指定了/ C或/ K,则命令行的其余部分将作为新shell中的立即命令处理。由命令分隔符“&amp;”分隔的多个命令或'&amp;&amp;'如果被引号包围,则被接受。

您的意思是cmd.exe /D吗?