2013-07-30 26 views
0

所以下面打開一個新的瀏覽器窗口,當我把它在CMD手動:運行命令手動與Java(使用CMD.EXE)

cd C:/Program Files (x86)/Google/Chrome/Application&chrome.exe 

然而,當我試圖通過Java程序來做到這一點(見下),命令提示符打開並進入正確的目錄,但不會打開新窗口。我需要改變什麼想法?

Runtime rt = Runtime.getRuntime(); 
    rt.exec("cmd.exe /c start cd C:/Program Files (x86)/Google/Chrome/Application&chrome.exe"); 
+0

你有沒有試過rt.exec(「C:/ Program Files(x86)/Google/Chrome/Application/chrome.exe」); – Katona

+0

我確實嘗試過,並且該機器似乎在C:/ Program中引發錯誤。它沒有超越那個。 – austinthemassive

+0

它似乎Runtime.exec(字符串)標記化字符串,但Runtime.exec(字符串[])不是,所以我最後的猜測會是rt.exec(新字符串[] {「C:/ Program Files文件(x86)/谷歌/Chrome/Application/chrome.exe「}); – Katona

回答

1

rt.exec("cmd.exe /c start cd \"C:/Program Files (x86)/Google/Chrome/Application&chrome.exe\"");

未測試,但這應該工作,我只是把雙引號的完整路徑,以便由於空間它不被認爲是下一個參數。

如果這不起作用,我建議嘗試Apache Commons Exec庫,因爲我總是使用它。

這裏是我的應用程序之一一些示例代碼:

CommandLine cmdLine = new CommandLine("cmd.exe"); 
        cmdLine.addArgument("/c"); 
        cmdLine.addArgument(".\\phantomjs\\nk\\batchbin\\casperjs.bat"); 
        cmdLine.addArgument(".\\phantomjs\\nk\\batchbin\\dd.js"); 
        cmdLine.addArgument(url); 
        cmdLine.addArgument(">" + rand); 
        DefaultExecutor executor = new DefaultExecutor(); 
        int exitValue = executor.execute(cmdLine); 

使用類似的完整路徑上面的chrome.exe應該被添加爲新的參數,然後該庫將採取逃避的護理。

+0

我其實剛剛解決了這個問題,使用Apache Commons庫(由其他來源推薦)。謝謝你的提示! – austinthemassive

2

嘗試ProcessBuilder而不是Runtime

String command = "C:/Program Files (x86)/Google/Chrome/Application&chrome.exe"; 
ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c", command); 
Process p = pb.start(); 

參見:

+0

我會給這個鏡頭。 Runtime和ProcessBuilder之間有什麼區別,在你看來,我應該什麼時候使用它們? – austinthemassive

+0

老實說,我不知道究竟有什麼區別,但我使用'ProcessBuilder'主要是因爲你可以使用'pb.environment()。put(key,value)'設置環境變量。另外,使用多個參數分別運行命令會更簡單,而不是將它們寫入一個大字符串中。 – dic19