2

.batファイルをリモートで実行し、次のコード行を実装しようとしています。

ProcessBuilder processBuilder = new ProcessBuilder(command);
    final Process process = processBuilder.start();

    InputStream stderr = process.getErrorStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;


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

    }
    process.waitFor();
    System.out.println("Waiting ...");

    System.out.println("Returned Value :" + process.exitValue());

しかし、私のプログラムはwhileループ内でスタックします。表示されるエラーは次のとおりです。

CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.

whileループから抜け出すことはありませんが、スクリプトは正常に実行されます。どんな種類の助けもありがたいです。ありがとう

4

2 に答える 2

3

stderrも処理していることを確認する必要があり、両方のストリームを別々のスレッドで処理する必要があります。

これを読んで、すべてのアドバイスに従うようにしてください。

編集:あなたが書いたコードを見ると、あなたはこの正確な記事からコードを再現したようです。実際、リスト4.3(MediocreExecJavac.java)のように見えます。

于 2010-09-27T21:22:38.757 に答える
2

.start()の前にredirectErrorStream(true)を追加し、getInputStream()を読み取ります。これにより、stderrが読み取られ、それがstdoutとマージされて、getInputStream()で読み取ることができる1つの応答になります。

    ProcessBuilder processBuilder = new ProcessBuilder(command);
    processBuilder.redirectErrorStream(true);
    final Process process = processBuilder.start();

    InputStream stderr = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;


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

    }
    process.waitFor();
    System.out.println("Waiting ...");

    System.out.println("Returned Value :" + process.exitValue());
于 2014-01-16T20:41:48.123 に答える