2016-04-06 26 views
0

我有以下的測試代碼:當我經過的ArrayList到的ProcessBuilder我得到的沒有這樣的文件或目錄錯誤

public class TestProcessBuilder { 

public static void main(String args[]) { 
String imageLocation = "/home/john/image"; 
String installCommand = "java -jar install.jar -install /home/john/install.properties"; 
ProcessBuilder pb = new ProcessBuilder(); 

pb.directory(new File(imageLocation)); 
pb.command(Arrays.asList(installCommand.split("\\+s"))); 
    try { 
     pb.start(); 
    } catch(Exception e) { 
    e.printStackTrace(); 
    System.out.println("Failed to run command"); 

    } 

} 

這給了我一個錯誤:

Cannot run program "java -jar install.jar -install /home/john/install.properties" (in directory "/home/john/"): error=2, No such file or directory 

我一定要創建一個單獨的列表,然後手動將每個標記化的項目添加到它。我認爲這應該工作...

+0

我也曾嘗試:'列表 list2 = new ArrayList ();對於(String s:Arrays.asList(installCommand.split(「\\ + s」))){ list2.add(s); } pb.command(list2); ' – eeijlar

回答

1

你應該確保你的java文件夾的路徑被導出。然後,您可以使用類似這樣的東西:

public static void main(String[] args) { 
    String command = "java"; 
    String parameters = "-jar install.jar -install /home/john/install.properties"; 
    ProcessBuilder pb = new ProcessBuilder(command, parameters); 

    try { 
     pb.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

所依賴的你的需要,但你也可以使用這個,如果你想在一個字符串傳遞整個命令:

try { 
     Runtime.getRuntime().exec("java -jar install.jar -install /home/john/install.properties"); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

我試着把java路徑放在命令前面:'/opt/java/jdk1.7.0_75//bin/java -jar ...'但它沒有任何區別。 – eeijlar

+0

將命令拆分爲命令和參數或使用.exec代替 – Dario

+0

'Runtime.getRuntime().exe'是唯一可行的選項。如果我使用'command'和'parameters'選項,它會嘗試執行此操作:'java「-jar install.jar -install /home/john/install.properties」'它會在參數中加雙引號。如果我將整個命令+參數轉換成列表,我得到'java.io.IOException:無法運行程序「java -jar installer.jar -install /home/john/install.properties」:error = 2,沒有這樣的文件或目錄「儘管如此,它並沒有說明它找不到哪些文件! – eeijlar

相關問題