Javaプログラミング:Javaからexeを呼び出し、パラメーターを渡します


87

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はパラメータを受け入れます。もう1つの問題は、PathToExeに空白がある場合です。ProcessBuilderが機能していないようです。例えば:

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

ありがとうございました。


1
new ProcessBuilder( "C:\\ PathToExe \\ MyExe.exe"、 "param1"、 "param2")。start();
ジョン・ウェスレー王子2011


1
new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();このスニペットはオプション引数に役立ちますか?助けのためにと..だから上に立つ例-h用
ロレンツォB

空白のあるパスはどうですか?ありがとうございました。非常に役立ちます!!
ロレンツォB

3
@Flex:引数は引数です。引数の意味は、実行中のプログラムに完全に依存します。あるプログラムは-hオプションとして解釈でき、別のプログラムはそれをファイル名として解釈できます。ProcessBuilder知らないし、気にもしない。スペースを含むパスの再作成:これが、コマンドラインや一部の貧弱なAPIのように、(たとえば)スペースで区切られたリストとしてではなく、個別の文字列として引数が指定される理由の1つです。そこにスペースを捨てて捨てると、プログラムパス全体がOSに渡され、適切に処理されます。
TJ Crowder 2011

回答:



8

あなたは正しい方向に進んでいます。2つの コンストラクタは引数を受け入れる、またはあなたがそれらのポスト建設を指定することができますProcessBuilder#command(java.util.List)し、ProcessBuilder#command(String...)


明確にするために:ProcessBuilder#command(java.util.List)そしてProcessBuilder#command(String...)コンストラクターを介して指定された既存のコマンドをowerwriteします(ドキュメントからはあまり明確ではありません)。
Snozzlebert 2018年

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

1
引数をどこに置くか?
Mert Serimer 2018年

1
@Shikha質問に答えてください
。カディ

0

あなたのexeがいくつかのdllまたは特定の依存関係に依存している場合、以下は私のために働きます、そしてあなたはディレクトリパスを設定する必要があります。以下で説明するように、exePathは、exeが参照ファイルとともに配置されるフォルダーを意味します。

processBuilder.directory(...)のフォルダーメンションに作成されるようにtemporarayファイルを作成するexeアプリケーション

****

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

****

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.