应用程序没有使用ProcessBuilder响应

时间:2015-02-18 08:38:02

标签: java asynchronous processbuilder

我目前正在做一个Eclipse插件,主要调用各种脚本并与返回值进行交互。

我的主要问题是ProcessBuilder。如果我调用一个创建新Visual Basic窗口的脚本我不能再与插件交互,直到我关闭VB窗口。似乎cmd命令仍然在后台运行,并且只有在它停止后插件才会再次响应。

我怎么能修复它?它应该以任何方式异步运行吗?

这是我使用的ProcessBuilder:

public void execute(String scriptCMD) {
  try {
    ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c",
        scriptCMD);
    pb.redirectErrorStream(true);
    Process p = pb.start();
    BufferedReader r = new BufferedReader(new InputStreamReader(
        p.getInputStream()));
    String line;
    while (true) {
      line = r.readLine();
      if (line == null) {break;}
      System.out.println(line);
    }
  } catch (IOException e) {
    e.printStackTrace();
    }
}

1 个答案:

答案 0 :(得分:2)

这是一个在另一个线程中异步执行进程的简单示例。我使用过单线程执行程序,因为只执行了一个任务:

java.util.concurrent.Executors.newSingleThreadExecutor().execute(new Runnable() {
  public void run() {
    ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/c",
        scriptCMD);
    pb.redirectErrorStream(true);
    Process p = pb.start();
    BufferedReader r = new BufferedReader(new InputStreamReader(
        p.getInputStream()));
    String line;
    while (true) {
      line = r.readLine();
      if (line == null) {break;}
      System.out.println(line);
    }
  }
});