2011-04-09 54 views
70

我想出了一種從Java調用exe並傳入特定參數的機制。我能怎麼做?Java編程:從Java調用exe文件並傳遞參數

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe").start(); 
InputStream is = process.getInputStream(); 
InputStreamReader isr = new InputStreamReader(is); 
BufferedReader br = new BufferedReader(isr); 
String line; 

System.out.printf("Output of running %s is:", Arrays.toString(args)); 

while ((line = br.readLine()) != null) { 
    System.out.println(line); 
} 

上面的代碼有效。 但我無法在中傳遞參數。 MyExe.exe接受參數。另一個問題是PathToExe有空格時。 ProcessBuilder似乎不起作用。例如:

C:\\User\\My applications\\MyExe.exe 

謝謝。

+1

新的ProcessBuilder(「C: \\ PathToExe \\ MYEXE.EXE」, 「參數1」, 「參數2」)開始(); – 2011-04-09 11:24:20

+1

http://download.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html – 2011-04-09 11:25:04

+0

'新的ProcessBuilder(「C:\\ PathToExe \\ MyExe.exe」,「param1」,「param2 「).start();'這段代碼對於選項參數有價值嗎?例如-h代表幫助等等。 – 2011-04-09 12:27:57

回答

97

將您的參數傳遞給構造函數本身。

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start(); 
+0

這是正確的..我能夠運行我的.exe使用這個。 – AutoMEta 2012-02-07 08:53:21

+0

如果可執行文件在jar文件中,該怎麼辦? – 2017-02-27 17:27:42

+0

@Guys。請幫助解決http://stackoverflow.com/questions/43050217/how-to-invoke-java-through-processbuilder?noredirect=1#comment73185557_43050217 – gstackoverflow 2017-03-27 16:15:56

0
import java.io.IOException; 
import java.lang.ProcessBuilder; 

public class handlingexe { 
    public static void main(String[] args) throws IOException { 
     ProcessBuilder p = new ProcessBuilder(); 
     System.out.println("Started EXE"); 
     p.command("C:\\Users\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"); 

     p.start(); 
     System.out.println("Started EXE"); 
    } 
} 
+0

在哪裏可以把參數? – 2018-01-11 14:53:40

+0

你能更清楚嗎? – 2018-01-22 11:18:28

0

以下工作對我來說,如果你的EXE依賴於某些DLL或一定的依賴性,那麼你需要設置目錄路徑。 正如下面提到的exePath意思是文件夾的位置與它的引用文件放在一起。

EXE應用程序創建任何文件temporaray所以它會在文件夾中提到創建processBuilder.directory(...)

**

ProcessBuilder processBuilder = new ProcessBuilder(arguments); 
processBuilder.redirectOutput(Redirect.PIPE); 
processBuilder.directory(new File(exePath)); 
process = processBuilder.start(); 
int waitFlag = process.waitFor();// Wait to finish application execution. 
if (waitFlag == 0) { 
... 
int returnVal = process.exitValue(); 
} 

**