2012-11-01 65 views
1

我一直在尝试使用下面的代码使用Java的代码执行Microsoft Excel中:的Java在Java程序中执行一个程序的Mac

Process pro = Runtime.getRuntime().exec("open -a Microsoft"+"\\"+" "+"Excel"); 
pro.waitFor(); 

当我打印此命令时,正是我用手工在命令行中启动Excel,但是当我想用java运行时启动它时,它不起作用。我知道在Microsoft Windows命令行中不存在这样的问题,但在Mac中有没有其他方法可以通过使用java代码来启动程序?

我也试图通过使用相同的代码就像启动一个计算器:

Process pro = Runtime.getRuntime().exec("open -a Calculator"); 

它完美的作品,是不是因为“微软”和“创先争优”的空间?

回答

2

java.lang.Runtime.exec(String)将命令行解析为单个参数本身,并且不知道任何关于shell元字符的内容,例如使用\引用应该插入参数的空格字符。

试着做了分裂的说法,而不是自己:

String[] cmdline = { "open", "-a", "Microsoft Excel" }; 
Runtime.getRuntime.exec(cmdline); 

注意,你不应该需要(或能够)用一个反斜杠逃脱的第三个元素的空间。当您在命令行中键入命令时,该反斜杠被外壳程序占用,因为它将线路分成参数以传递给open程序,但Runtime.exec()直接启动进程而无需外壳的干预,所以如果您在那里放一个反斜杠,open就能看到它,并且会被它弄糊涂。

+0

使用字符串数组确实解决了我的问题,谢谢。 –