2014-06-25 84 views
1

我試圖使用Runtime和工藝來執行另一個文件Java運行時的.exec()不會打開可執行

try 
{ 
Runtime run = Runtime.getRuntime(); 
Process pro = run.exec("C:\\Users\\user\\Desktop\\file.exe"); 

} 
catch(Exception a) 
{ 
    a.printStackTrace(); 
} 

我可以在輸入這個命令運行或cmd,然後我能夠打開該文件,但運行它通過我的程序它不會打開。沒有錯誤,它只是不打開。

+0

如果沒有錯誤,那麼它很可能運行 - 你怎麼知道它不? – assylias

+0

我試過了多個文件 – joe

+0

而不是異常使用Throwable並查看是否有異常拋出 – SparkOn

回答

1

爲了更好地理解正在發生的事情(和它實際上是Process類的要求),你需要重定向輸入和錯誤流你的過程 - 並使用的ProcessBuilder是推薦的方式來啓動進程:

public static void main(String[] args) throws Exception { 
    ProcessBuilder pb = new ProcessBuilder("C:\\Users\\user\\Desktop\\file.exe"); 
    runProcess(pb) 
} 

private static void runProcess(ProcessBuilder pb) throws IOException { 
    pb.redirectErrorStream(true); 
    Process p = pb.start(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     System.out.println(line); 
    } 
} 
+0

沒有得到任何打印,這是否表明它沒有正確讀取文件? – joe

+0

@joe讀什麼文件?什麼是'file.exe'應該做的?當您從命令行運行'C:\ Users \ user \ Desktop \ file.exe'時會發生什麼? – assylias

+0

它啓動一個視頻遊戲,從命令行啓動它的工作。 – joe

1

你必須做

Process pro = run.exec("C:\\Users\\user\\Desktop\\file.exe",null,"C:\\Users\\user\\Desktop\\"); 

請參閱Run .exe file from Java from file location

+0

第三個實際參數是在你鏈接的例子中演示的一個文件,我跟着這個,它仍然不會打開。 – joe

+0

Process pro = run.exec(「C:\\ Users \\ user \\ Desktop \\ file.exe」,null,new File(「C:\\ Users \\ user \\ Desktop」)); – joe

1

試試這個方法:

String []cmdarray = new String[4]; 
    cmdarray[0] = "cmd"; 
    cmdarray[1] = "/c"; 
    cmdarray[2] = "start"; 
    cmdarray[3] = "C:\\Users\\user\\Desktop\\file.exe"; 
    Runtime.getRuntime().exec(cmdarray); 
+0

noope仍然不會啓動:/ – joe

1

試試這個,創建一個批處理文件,像start_file.bat。 像這樣的內容:

cd C:\Users\user\Desktop ----- Goto this directory 
C: ----- This line is very important 
file.exe 

無論這兩種方法很好地工作。

Runtime r = Runtime.getRuntime(); 
    String []cmdarray = new String[4]; 
    cmdarray[0] = "cmd"; 
    cmdarray[1] = "/c"; 
    cmdarray[2] = "start"; 
    cmdarray[3] = "C:/users/desktop/start_file.bat"; 
    r.exec(cmdarray); 

這一個:

r.exec("C:/users/desktop/start_file.bat"); 
    You can read the output from this new process. 
+0

也許,windows知道程序啓動時的LOCATION有很多假設在根路徑,如環境變量,其中操作系統可以找到相關的DLL .. –