应用程序未使用 ProcessBuilder 响应
application not responding using ProcessBuilder
我目前正在做一个 Eclipse 插件,主要调用各种脚本并与 return 值交互。
我的主要问题是 ProcessBuilder。如果我例如调用创建新 Visual Basic 的脚本 window 在关闭 VB window 之前我无法再与插件交互。似乎 cmd 命令仍在后台 运行ning,只有在它停止后插件才会再次响应。
我该如何修复它?它应该 运行 以任何方式异步吗?
这是我正在使用的 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);
}
}
});
我目前正在做一个 Eclipse 插件,主要调用各种脚本并与 return 值交互。
我的主要问题是 ProcessBuilder。如果我例如调用创建新 Visual Basic 的脚本 window 在关闭 VB window 之前我无法再与插件交互。似乎 cmd 命令仍在后台 运行ning,只有在它停止后插件才会再次响应。
我该如何修复它?它应该 运行 以任何方式异步吗?
这是我正在使用的 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);
}
}
});