2012-10-11 57 views
2

所以我試圖做出一個通用的應用程序,我試圖讓它有能力打開應用程序。所以,我想通過它打開一個應用程序,如果它是一個詞,但是有空格,它就不會起作用。這就是我的做法:如何使用Runtime.getRuntime()。exec()打開名稱中包含空格的應用程序?

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(); 
    } 
    } 

如果有人能幫助我,那太棒了! 在此先感謝, Howard Stark

+0

密切相關的HTTP解釋://stackoverflow.com/questions/7134486/how-to-execute-command-with-parameters – Raedwald

回答

6

使用的exec版本,需要一個String[]

這個工作對我來說:

String cmds[] = { "open", "/Applications/Font Book.app" }; 
Runtime.getRuntime().exec(cmds); 

鑑於此不:

Runtime.getRuntime().exec("open /Applications/Font Book.app"); 

後者只能使用空格來分解命令參數,因此被解析爲命令打開,然後是由空格分隔的2個參數。前者 - 版本exec需要String[] - 分別傳遞每個參數,因此不存在此問題。

3

使用exec的變體,分別接受命令和參數。最直接更換

Runtime.getRuntime().exec(new String[] {"executable with spaces"}) 

EXEC(字符串[])

2

@ ScArcher2是正確的(+1)。

但是這個解決方案不是跨平臺的。例如,你可能需要在Unix中的空格之前插入\。 更好的解決方案是使用ProcessBuilder而不是Runtime.exec()ProcessBuilder創建便攜式命令行並自動支持空格。

+0

無論出於什麼原因,我的答案沒有奏效。看起來使用Runtime的最佳方式是使用String []命令行參數。 – ScArcher2

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(); 
相關問題