【问题标题】:Execute external program执行外部程序
【发布时间】:2012-12-09 02:02:24
【问题描述】:

我试图制作一个调用外部程序的应用程序,我必须传递两个参数。它不会给出任何错误。

program.exe,用 C++ 编写,拍照并修改.txt 文件的内容。

Java 程序运行但什么也不做-

这是我的示例代码:

    String[] params = new String [3];
    params[0] = "C:\\Users\\user\\Desktop\\program.exe";
    params[1] = "C:\\Users\\user\\Desktop\\images.jpg";
    params[2] = "C:\\Users\\user\\Desktop\\images2.txt";
    Runtime.getRuntime().exec(params);

【问题讨论】:

  • 到底是什么问题,您有可以添加到问题中的错误消息吗?谢谢。
  • 你说,你要传递两个参数,但这里显示的是 3 个参数
  • 如果没有执行,错误是什么?你的 program.exe 是做什么的?
  • 为什么这个问题被关闭为“过于本地化”?

标签: java runtime runtime.exec


【解决方案1】:

这是从here 借来的可耻

Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;

System.out.printf("Output of running %s is:", Arrays.toString(args));

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

更多信息here

关于如何传递命令herehere的其他问题

【讨论】:

  • 我的问题是将参数传递给program.exe
  • 除了getInputStream,你还可以使用getErrorStream来获取错误信息(stderr)
  • 对于寻找带参数的单线的人:(new ProcessBuilder(new String[]{ notePadPath, theFile.getPath()})).start(); ...好吧...包装在 try/catch .... 假设 notePadPath 类似于 c:\\program files\\notepad++\\notepad++.exe 。 . 双斜线转义.. 和你的真棒,因为你使用 np++
  • 什么是“args”变量?
【解决方案2】:

你也可以试试它更现代的表亲ProcessBuilder

Java Runtime.getRuntime().exec() alternatives

【讨论】:

    【解决方案3】:
    import java.io.*;
    
    public class Code {
      public static void main(String[] args) throws Exception {
        ProcessBuilder builder = new ProcessBuilder("ls", "-ltr");
        Process process = builder.start();
    
        StringBuilder out = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
            String line = null;
          while ((line = reader.readLine()) != null) {
            out.append(line);
            out.append("\n");
          }
          System.out.println(out);
        }
      }
    }
    

    Try online

    【讨论】:

      最近更新 更多