java - 使用 ProcessBuilder 应用程序没有响应

标签 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();
    }
}

最佳答案

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

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);
    }
  }
});

关于java - 使用 ProcessBuilder 应用程序没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28579185/

相关文章:

java - 嵌套异常是 java.lang.NoSuchMethodError : org. hibernate.integrator.internal.IntegratorServiceImpl.<init>

javascript - AJAX 异步响应回调

c++ - std::promise 外部代码,异步取消

c# - 使用 WPF C# 同时对两个 UIElement 进行动画处理

java - 如何使用带有参数的 exitValue() ?

java - "Program Files"命令实习生未找到 CMD

java - Pluralsight 使用 Java 为 Android 和 PC 构建您的第一款游戏

java - 泛型返回类型不起作用

java - 如何将具有不同字段计数的分隔文本行解析为对象,同时允许扩展?