所以,首先我要说的是,我已经找到了每个Q& A,无论是在网站上还是网站,我都能找到,而且我还在打砖墙。
我的计划:
我的所有程序都在我的程序所在的目录中运行批处理文件。
代码是:
try {
Process p = Runtime.getRuntime().exec("cmd /c start startclient.bat");
} catch (IOException ex) {
Logger.getLogger(MCPFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
当我执行代码时,我会收到警告窗口:
Windows cannot find 'startclient.bat'. Make sure you typed the name correctly, and then try again.
如果我用:
指定目录Process p = Runtime.getRuntime().exec("cmd /c start C:\\Folder\\startclient.bat");
我明白了:
The system cannot find the path specified.
Press any key to continue . . .
C:\Windows\system32>
所以我没有受过教育的猜测是,当我通过java调用批处理文件时,它是从“C:\ Windows \ system32>”开始的。但是当我只是双击批处理文件时,它从本地目录开始。
我该如何解决这个问题?
:(
PS 踢球者,我实际上去年有这个东西工作,但由于某种原因,它将不再表现。
PPS 我正在运行Win 7,一切都是最新的。
答案 0 :(得分:4)
(我只是评论,但我还没有足够的代表发表评论,因此这个“回答”)
我使用了很多从Java调用的批处理文件(在Linux,OS X和Windows上)和 首先要知道的是你应该基本上永远不要使用构造函数一个字符串,因为它确实是有问题的。
您最好始终自己创建参数数组并使用此方法:
public Process exec(String [] cmdArray)
您还必须知道正确使用流可能会非常棘手。在许多情况下,您最好简单地使用可以更轻松地处理批处理文件的库。
例如,您可能不喜欢重新发明轮子,而不是Apache的公共执行者:
答案 1 :(得分:2)
当我指定像C:\ Folder \ startclient.bat这样的目录时,我有
之后的反斜杠C:\\ as forward slashes and only one.
C:\\Folder/startclient.bat
下面应该适合你。嗯,我希望如此。适合我。
try {
Runtime rt = Runtime.getRuntime();
rt.exec("cmd.exe /c start C:\\Folder/startclient.bat");
} catch (Exception ex){
}