我目前正在做一个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();
}
}
答案 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);
}
}
});