要从java执行bash中的进程/命令,可以使用以下类:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
public class CmdExecutor {
public CmdExecutor(){
}
public void exe(String [] args) throws IOException{
if (args.length <= 0) {
System.out.println("empty command");
return;
}
Process process = new ProcessBuilder(args).start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:",
Arrays.toString(args));
while ((line = br.readLine()) != null) {
System.out.println(line);
}
}
}
然而。如果该过程未终止(尚未结束)该怎么办?它进行计算并在shell中输出。我希望能够在另一个线程中运行该进程并在输出中进行更改,例如逐帧字符串。怎么能实现这一目标?
答案 0 :(得分:1)
退房 http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html
您可能希望让一个线程(生产者)读取进程输出,并将它们放入LinkedBlockingQueue(queue.put
),然后让另一个线程(使用者)从队列中获取元素(queue.poll
并处理它。