Pemrograman Java: memanggil exe dari Java dan meneruskan parameter

87

Saya sedang mencari tahu mekanisme untuk memanggil exe dari Java dan meneruskan parameter tertentu. Bagaimana saya bisa melakukannya?

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);
}

Kode sebelumnya berfungsi. Tapi saya tidak bisa memasukkan parameter . MyExe.exe menerima parameter. Masalah lainnya adalah ketika PathToExe memiliki spasi kosong. ProcessBuilder sepertinya tidak berfungsi. Sebagai contoh:

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

Terima kasih.

Lorenzo B
sumber
1
ProcessBuilder baru ("C: \\ PathToExe \\ MyExe.exe", "param1", "param2"). start ();
Pangeran John Wesley
1
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();Apakah cuplikan ini berharga untuk argumen opsi? Misalnya -h yang berarti bantuan dan sebagainya ..
Lorenzo B
bagaimana dengan jalur dengan spasi kosong? Terima kasih lagi. Sangat membantu!!
Lorenzo B
3
@ Fleks: Argumen adalah argumen. The makna dari argumen adalah sepenuhnya terserah program makhluk dijalankan. Satu program dapat ditafsirkan -hsebagai opsi, program lain dapat menafsirkannya sebagai nama file. ProcessBuildertidak tahu atau peduli. Re path dengan spasi: Itulah salah satu alasan mengapa argumen diberikan sebagai string terpisah daripada sebagai (katakanlah) daftar yang dipisahkan spasi seperti pada baris perintah dan di beberapa API yang buruk. Lempar spasi di sana dengan mengabaikan, seluruh jalur program akan diberikan ke OS untuk diperlakukan sebagaimana mestinya.
TJ Crowder

Jawaban:

120

Teruskan argumen Anda dalam konstruktor itu sendiri.

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
Pangeran John Wesley
sumber
Bagaimana jika executable ada di dalam file Jar?
t4d_
@Tokopedia tolong bantu untuk menyelesaikan stackoverflow.com/questions/43050217/…
gstackoverflow
8

Anda berada di jalur yang benar. The dua konstruktor menerima argumen, atau Anda dapat menentukan mereka pasca konstruksi dengan ProcessBuilder#command(java.util.List)dan ProcessBuilder#command(String...).

TJ Crowder
sumber
Untuk klarifikasi: ProcessBuilder#command(java.util.List)dan ProcessBuilder#command(String...)owerwrite setiap perintah yang ada yang ditentukan melalui konstruktor (imho itu tidak terlalu jelas dari dokumen).
Snozzlebert
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"); 
    }
}
Shikha Chauhan
sumber
1
Di mana meletakkan args?
Mert Serimer
1
@Shikha silahkan melalui pertanyaan
Anand j. Kadhi
0

Di bawah ini berfungsi untuk saya jika exe Anda bergantung pada beberapa dll atau ketergantungan tertentu maka Anda perlu mengatur jalur direktori. Seperti disebutkan di bawah exePath berarti folder tempat exe ditempatkan bersama dengan file referensinya.

Aplikasi exe membuat file temporaray apa pun sehingga akan dibuat di folder yang disebutkan di 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();
} 

**

pengguna3124811
sumber