我目前正在做一个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/