所以我正在尝试创建一个通用应用程序,我正在努力让它能够打开应用程序。所以,我想让它打开一个应用程序,如果它是一个单词,但有空格,它永远不会工作。我就是这样做的:
if(textField.getText().startsWith("application open")){
try {
String string1 = textField.getText().substring(17, textField.getText().length());
Runtime.getRuntime().exec("open /Applications/\"" + string1 + "\".app");
textArea.append("Opening application " + string1 + "..." + newline);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
如果有人能帮助我,那就太好了! 提前致谢, 霍华德史塔克
答案 0 :(得分:6)
使用String[]
的版本exec
:
这对我有用:
String cmds[] = { "open", "/Applications/Font Book.app" };
Runtime.getRuntime().exec(cmds);
然而这不是:
Runtime.getRuntime().exec("open /Applications/Font Book.app");
后者只能使用空格来分解命令参数,因此被解析为命令 open ,后跟由空格分隔的2个参数。前者 - exec
的版本采用String[]
- 单独传递每个参数,因此没有这个问题。
答案 1 :(得分:3)
使用exec的变体分别获取命令和参数。最直接的替代是
Runtime.getRuntime().exec(new String[] {"executable with spaces"})
EXEC(字符串[])
答案 2 :(得分:2)
@ ScArcher2是对的(+1)。
但这个解决方案不是跨平台的。例如,您可能必须在Unix中的空格之前插入\
。
更好的解决方案是使用ProcessBuilder
而不是Runtime.exec()
。 ProcessBuilder
创建可移植命令行并自动支持空格。
答案 3 :(得分:2)
您可以尝试使用ProcessBuilder: http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html
使用目录(文件目录)方法设置工作目录(包含空格的目录),然后使用start()启动该过程。
来自javadoc的简化示例:
ProcessBuilder pb =
new ProcessBuilder("myCommand", "myArg1", "myArg2");
pb.directory(new File("myDir"));
Process p = pb.start();
答案 4 :(得分:1)
使用ProcessBuilder,它的设计目的是让您的生活更轻松
ProcessBuilder pb = new ProcessBuilder("open", "/Applications/\"" + string1 + "\".app");
Process p = pb.start();
中所述