0

以下のようなサンプルJavaコードがあります。

    String testEfdDirectoryPath="D:\\test";
    String efdExecutable = "test.cmd";
    File executableFile = new File(testEfdDirectoryPath, efdExecutable);
    ProcessBuilder pb=new ProcessBuilder();
    $$pb.command("cmd.exe","/C",executableFile.toString());$$
    pb.directory(new File(testEfdDirectoryPath));
    Process p=pb.start();
    int code=p.waitFor();
    System.out.print(code);

test.cmd には、実際には別の Java アプリケーションへの呼び出しがあります。$$ でマークされた行を次のように変更して出力をリダイレクトしない限り、別の Java アプリを起動できません。

    pb.command("cmd.exe","/C",executableFile.toString(),">output.txt");

何かアイデアはありますか?前もって感謝します。:)

4

2 に答える 2

2

子プロセスは大量の出力 (数キロバイト以上) を生成しますか? その場合は、プロセスからその出力を読み取る必要があります。試してみてください:

  1. プロセスを開始する
  2. stdinプロセスを閉じるので、pb.getOutputStream().close()
  3. pb.getInputStream()エラーストリームから繰り返し読み取られます

これは、1 つのスレッドでも複数のスレッドでも可能です。いずれにせよ、上記の説明をキーワードのリストとして使用し、信頼できるコード スニペットの例を検索してください。できれば、そのようなことを成功させるオープン ソース アプリケーションから検索してください。

http://commons.apache.org/exec/が役立つかもしれません。

于 2012-01-17T08:05:26.177 に答える
0

Windows はスクリプトを直接実行できません。.cmd ファイルをダブルクリックすると、実際にはcmd.exeでファイルが開きます。だから試してみてくださいcmd.exe E:\\test\\test.cmd

于 2012-01-17T07:48:58.057 に答える