1

コマンド プロンプトから別の Java ファイルをコンパイルするプログラムを作成しようとしています。しかし、私はそれに問題があります。この時点で、Mocha.java をコンパイルする最初の部分が正常に実行されています。ただし、そのファイルも実行して、出力内容を表示したいと考えています。何も表示されません。助言がありますか?

    pb = new ProcessBuilder("javac","Mocha.java");
    try {
        Process shell = pb.start();
        OutputStream shellOut = shell.getOutputStream();
        shellOut.write("java Mocha".getBytes());
        shellOut.close();
        InputStream shellIn = shell.getInputStream();
        String response = IOUtils.toString(shellIn, "UTF-8");
        System.out.println(response);
        shellIn.close();
        shell.destroy();
    } catch (IOException ex) {
        System.out.println("failed");
    }

ノート:

また、最初はすべての引数を次のようにしようとしました:

pb = new ProcessBuilder("javac","Mocha.java","&&","java","Mocha");

しかし、これは機能しないだけでなく、上記のように Mocha.java をコンパイルすることさえできませんでした。

ありがとう!

編集:

そこで、これを変更して2つのプロセスを作成しました。今みんな素晴らしい作品!興味のある方へ:

    pb = new ProcessBuilder("javac","Mocha.java");
    try {
        Process shell = pb.start();
        int error = shell.waitFor();
        shell.destroy();
        if (error == 0)
        {
            pb = new ProcessBuilder("java","Mocha");
            shell = pb.start();
            InputStream shellIn = shell.getInputStream();
            String response = IOUtils.toString(shellIn, "UTF-8");
            System.out.println(response);
            shellIn.close();
            shell.destroy();
        }
    } catch (IOException ex) {
        System.out.println("failed");
    } catch (InterruptedException ex) {
    }
4

2 に答える 2

3

これは正常です。2 つのコマンドは 2 つのプロセスを意味します。2 つの s が必要ProcessBuilderで、2 番目のプロセスを実行する前に最初のプロセスの戻り値を確認します。

この構文:

new ProcessBuilder("javac","Mocha.java","&&","java","Mocha");

動作しません。&&は論理シェル演算子ですが、javacコマンドはそれを認識しません。代わりに Java で処理ロジックを直接実行します。

if (p1.waitFor() == 0) // compile succeeded
    // initiate second process
于 2013-06-20T14:21:11.710 に答える
1

上記の構文は、Java ProcessBuilder ではなく、シェルで機能します。

オプション 1 は、シェルを起動してシェル コマンドを実行することです。もう 1 つは、ProcessBuilder を 2 回呼び出すことです。javac 用に 1 つ、Java 用にもう 1 つ

于 2013-06-20T14:20:58.077 に答える