代码之家  ›  专栏  ›  技术社区  ›  Plaudit Design

用java执行外部命令

  •  2
  • Plaudit Design  · 技术社区  · 14 年前

    有没有一种方法可以在java中执行一个命令,而不受使用ProcessBuilder的启动开销(缓慢)的影响?

    更多细节:我使用的是im4java,它是一个java库,内部使用ProcessBuilder执行imagemagick的程序。它很慢。我已经创建了一个小单元测试,它表明问题出在ProcessBuilder(而不是im4java)上。缓慢是使用ProcessBuilder的启动开销。我在网上发现了一些帖子,说processbuider有开销,所以不只是我说它有。

    List<String> commands = new ArrayList<String>();
    commands.add("C:\\PROGRA~2\\ImageMagick-6.6.4-Q16\\convert.exe");
    commands.add("dog.jpg");
    commands.add("output.jpg");
    ProcessBuilder processBuilder = new ProcessBuilder(commands);
    Process start = processBuilder.start();
    start.waitFor();
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Jonathan    14 年前

    不建议这样做,但您可以编写一个JNI库来执行ProcessBuilder正在执行的相同操作。也许您的速度会更快,但我不指望它,而且您将失去跨平台兼容性。

    我们在这里谈得有多慢?我在用 ProcessBuilder

        2
  •  0
  •   robert_x44    14 年前
    Runtime.getRuntime().exec(...)  
    

    可用于运行外部命令。可以将列表转换为命令数组或字符串以传递给exec()。