【问题标题】:Java: run executable program whit particular parametersJava:运行带有特定参数的可执行程序
【发布时间】:2013-11-07 16:13:45
【问题描述】:

我需要在 java 中运行可执行程序 (.exe)。该程序有两种不同的操作模式:GUI 和命令行。从命令行启动程序的语法如下: C:\Users\Ermanno\Desktop\ "programFolder"\"program.exe" /stext output.txt

程序以这种方式将输出存储在文件“output.txt”中。

我累了:

Process p = new ProcessBuilder("C:\\Users\\Ermanno\\Desktop\\programFolder\\program.exe" ,"/stext a.txt").start();

不创建输出文件。

我也厌倦了使用包含命令的文件批处理并将其运行到 java 但结果是一样的。

【问题讨论】:

  • 查看cmevoli用户解决方案:stackoverflow.com/questions/3468987/…>
  • “它不起作用” - 每次你在这里写下这个,没有进一步解释,你应该松开手指。
  • 从现在开始,不要再使用“不工作”了。这是对你的智力的侮辱,它浪费了每个人的时间。而是说出您期望发生的事情以及发生的事情。
  • 对不起,我编辑了这个问题。

标签: java batch-file


【解决方案1】:

您需要在单个字符串中传递每个参数:

... program.exe", "/stext", "a.txt")...

还要确保你启动了一个后台线程来读取子进程的输出。如果有问题,那么子进程会在它的标准输出中打印一条错误消息,如果你不主动阅读它,那么这个输出就会丢失。

为此,循环流p.getInputStream()p.getErrorStream()

后者尤其重要,因为您说“我也厌倦了使用文件批处理”。 Java 没有做任何与批处理脚本不同的事情。如果你不能从批处理中运行命令,它也不会在 Java 中运行。

【讨论】:

  • 可能问题出在 Windows 8 上?
  • 没有。您是否阅读并打印流程的标准输出?
  • System.out.println(p.waitFor());这是 0 的输出。如果我运行你的命令,启动 gui。
  • 你能发布代码吗?如果我打印 p.getInputStream() 和 p.getErrorStream() 输出是这样的: java.io.BufferedInputStream@5636bc0a java.io.BufferedOutputStream@237360be
  • 使用类似于IOUtils.copyLarge的代码。
【解决方案2】:

我对使用 JDK ProcessBuilder 和 Runtime.getRuntime().exec 的体验很糟糕。然后我搬到了 Apache commons-exec。这是一个例子:

String line = "AcroRd32.exe /p /h " + file.getAbsolutePath();
CommandLine cmdLine = CommandLine.parse(line);
DefaultExecutor executor = new DefaultExecutor();
int exitValue = executor.execute(cmdLine);

【讨论】:

    【解决方案3】:

    我使用文件浴解决了。此文件包含命令。

    String [] _s = {"cmd.exe", "/c", "start", "file.bat"}; Process pr = Runtime.getRuntime().exec(_s);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      • 1970-01-01
      • 2012-02-17
      • 2016-02-27
      • 1970-01-01
      相关资源
      最近更新 更多