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()错误流

这可能在一个线程中或在多个线程中是可能的。无论如何,您应该将上面的解释作为关键字列表,并尝试搜索您可以信任的示例代码片段,最好是从成功执行此类操作的开源应用程序中搜索。

也许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 回答