2014-04-10 44 views
0

下工作正常,當我直接鍵入到cmd.exe如何從Java爲netsh運行exec?

netsh wlan connect name="Profile Name" ssid=XXXXXX

然而,當我嘗試這樣做從Java這是行不通的,它也不會引發任何異常。它被無聲地忽略:

Runtime.getRuntime().exec("cmd netsh wlan connect name=\"Profile Name\" ssid=XXXXX ") ; ` 

我該如何改進代碼?

+0

閱讀(實施)*所有*的建議[當的Runtime.exec()不會(HTTP: //www.javaworld.com/jw-12-2000/jw-1229-traps.html)。這可能會解決問題。如果不是,它應該提供更多關於失敗原因的信息。然後忽略它引用'exec'並使用'ProcessBuilder'構建'Process'。還要將'String arg'分解爲'String [] args'來解釋其本身包含空格的參數。 –

回答

3

首先嚐試刪除cmd參數(您不需要運行此解釋器,只需netsh)。

否則它可能是由於此命令行中的空白字符造成的(請注意例如SSID中的空白字符)。您可能需要嘗試使用Runtime.exec(String[] cmdarray)java.lang.ProcessBuilder來代替單獨指定每個參數。

例子:

Runtime.getRuntime().exec(new String[] {"netsh", "wlan", "connect", "name=\"Profile Name\"", "ssid=XXXXX"}); 

或(完整的示例):

ProcessBuilder pb = new ProcessBuilder("netsh", "wlan", "connect", 
    "name=\"Profile Name\"", "ssid=XXXXX"); 
pb.redirectErrorStream(true); 
Process process = pb.start(); 
BufferedReader reader = new BufferedReader(
    new InputStreamReader(process.getInputStream())); 
String line = null; 
while ((line = reader.readLine()) != null) { 
    System.out.println(line); 
} 
+0

+1謝謝。但是我得到了同樣的結果。默默地忽略。 –

+0

我已經更新了我的答案。我已經測試過它,它適用於我。 – xav