Pertanyaan Pemrograman Java: memanggil exe dari Java dan mengirimkan parameter


Saya 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. Tetapi saya tidak dapat melewatkan parameter. MyExe.exe menerima parameter. Masalah lainnya adalah ketika PathToExe memiliki ruang kosong. ProcessBuilder sepertinya tidak berfungsi. Sebagai contoh:

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

Terima kasih.


75
2018-04-09 11:19


asal


Jawaban:


Berikan argumen Anda dalam konstruktor itu sendiri.

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

104
2018-04-09 11:31



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


7
2018-04-09 11:25



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
2017-09-15 04:23



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

Exe aplikasi membuat file temporer sehingga akan dibuat dalam 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();
} 

**


0
2017-10-07 07:46