0

次のタスクを実行するプロジェクト用の小さなアプリケーションを作成しました。

  1. commands.bat ファイルを書き込みます。このバッチ ファイルには、処理に時間がかかるいくつかのソース コード サーバー コマンドが含まれています。
  2. ProcessBuilder を使用して commands.bat を実行し、redirectOutput(File file) メソッドを使用して outputfile.txt を取得します。
  3. outputfile.txt を読み取り、目的の出力を取得します。

このアプリケーションを実行すると、プログラム制御は step-1 から始まり、完全に実行されます。ステップ 2 では、コントロールはバッチ ファイルを駆動するプロセスを開始します。今、commands.bat ファイルが完了するまでに時間がかかります (ソース コード サーバーからの応答によって異なります)。このバッチは、コントロールが待機せずにステップ 3 の実行を開始する妥当な時間より少し長くかかることがあります。このようにして、outfile.txt で完全なストリームを取得できません。次のようなものも使用しました。

  • waitfor(): このコントロールでもプロセスが終了するのを待っていません (技術的には間違っているかもしれません)
  • Thread.sleep()。バッチファイル処理にかかる時間は不明であるため、これは機能していません。

助けてください。

4

1 に答える 1

0

これは、バッチファイルが実行されるのを待っている方法です。うまくいけば、あなたは今までに問題を解決しました。しかし、それはこの質問を見ている他の誰かを助けるかもしれません

// Any command you want to run in my case im executing a batch file
String cmd = "load_execute.bat";
//FILE_PATH is the directory where to starting from

        ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", cmd).redirectErrorStream(true);
        builder.directory(new File(FILE_PATH));
        Process process = builder.start();

        //Redirect stream from cmd stream to local print stream
        BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = input.readLine()) != null) {
            System.out.println(line);
        }
        input.close();
        res = process.waitFor();`
于 2013-04-24T18:37:20.787 に答える