Java 应用程序未使用ProcessBuilder响应
我目前正在做一个Eclipse插件,主要是调用各种脚本并与返回值交互 我的主要问题是ProcessBuilder。如果我调用一个正在创建新的Visual Basic窗口的脚本,在关闭VB窗口之前,我将无法再与插件交互。似乎cmd命令仍在后台运行,只有在它停止后插件才会再次响应 我怎样才能修好它?它应该以任何方式异步运行吗 这是我正在使用的ProcessBuilder:Java 应用程序未使用ProcessBuilder响应,java,asynchronous,processbuilder,Java,Asynchronous,Processbuilder,我目前正在做一个Eclipse插件,主要是调用各种脚本并与返回值交互 我的主要问题是ProcessBuilder。如果我调用一个正在创建新的Visual Basic窗口的脚本,在关闭VB窗口之前,我将无法再与插件交互。似乎cmd命令仍在后台运行,只有在它停止后插件才会再次响应 我怎样才能修好它?它应该以任何方式异步运行吗 这是我正在使用的ProcessBuilder: public void execute(String scriptCMD) { try { ProcessBuild
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);
}
}
});
感谢两件事:newSingleThreadedExecutor()对于执行者来说似乎没有定义,使用java.util.concurrent.Executors和scriptCMD需要设置为final应该可以吗?忘记最后的注释,eclipse重启修复了这个问题。谢谢你快速可靠的回答!就像一个charmYes,方法的参数应该设置为final,没有什么不好的。