多线程Runtime.getRuntime().exec常见问题
来源:互联网 发布:剑灵女枪手捏脸数据图 编辑:程序博客网 时间:2024/05/16 07:44
JAVA调用一个bat批处理程序,调用几十次后会莫名的不再执行,无任何异常抛出。千试万试,LOG精细到逐行,只知道走到Runtime.getRuntime().exec()程序就停止了,但打死不知道为什么。那真以为里面有鬼。后来寻摸着Runtime.getRuntime().exec()有问题,真给我找到答案了。
大概原因是,调用Runtime.getRuntime().exec()后,如果不及时捕捉进程的输出,会导致JAVA挂住,看似被调用进程没退出。所以,解决办法是,启动进程后,再启动两个JAVA线程及时的把被调用进程的输出截获。
一下子,整个世界清爽多了。。。
原先程序只有一句:Runtime.getRuntime().exec(strMakePathPath);
后来程序更改为:
- Process proc = Runtime.getRuntime().exec(strMakePathPath);
- StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(), "Error");
- StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(), "Output");
- errorGobbler.start();
- outputGobbler.start();
- proc.waitFor();
- public class StreamGobbler extends Thread {
- InputStream is;
- String type;
- public StreamGobbler(InputStream is, String type) {
- this.is = is;
- this.type = type;
- }
- public void run() {
- try {
- InputStreamReader isr = new InputStreamReader(is);
- BufferedReader br = new BufferedReader(isr);
- String line = null;
- while ((line = br.readLine()) != null) {
- if (type.equals("Error")) {
- System.out.println("Error :" + line);
- } else {
- System.out.println("Debug:" + line);
- }
- }
- } catch (IOException ioe) {
- ioe.printStackTrace();
- }
- }
- }
0 0
- 多线程Runtime.getRuntime().exec常见问题
- 多线程Runtime.getRuntime().exec常见问题
- Runtime.getRuntime(). exec( )
- java Runtime.getRuntime().exec
- Runtime.getRuntime().exec
- Runtime.getRuntime().exec()
- Runtime.getRuntime().exec()
- java Runtime.getRuntime().exec()
- Runtime.getRuntime.exec 注意事项
- Runtime.getRuntime().exec()
- Runtime.getRuntime().exec
- Runtime.getRuntime().exec问题
- Runtime.getRuntime().exec(...)使用方法
- 通信-Runtime.getRuntime().exec
- Runtime.getRuntime().exec(strMakePathPath);
- Runtime.getRuntime().exec方法
- Runtime.getRuntime().exec方法
- Runtime.getRuntime().exec
- 把网站从vps转移到虚拟主机后伪静态不能从
- 支持向量机SVM——LIBSVM
- 黑马程序员——Java基础---面向对象
- cf A. Wilbur and Swimming Pool
- Android studio小技巧之xml与Java类快速跳转
- 多线程Runtime.getRuntime().exec常见问题
- Oracle trunc()函数的用法
- 如何在C语言中调用shell命令
- 实时推荐系统的3种方式
- 三种素数筛选方法
- ppt制作
- 用Javascript编写Chrome浏览器插件--(一)
- 按位异或运算交换两个变量的值原理
- TinyOS的个人见解4之任性的cc2538