Runtime.getRuntime().exec()常见问题-程序员宅基地

技术标签: java基础  java  runtime  

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();
		}
	}
}
   
     

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/saluya/article/details/84082763

智能推荐

此版本魔兽争霸III需要特定语言版本之Windows 的解决方法_wurst支持的war3版本-程序员宅基地

文章浏览阅读3.4w次。在英文的Vista系统上运行魔兽就会出现上面的问题。在网上搜了很多方法,最后下面这个最靠谱:1)用"TFTkeygen.exe"生成英文版魔兽争霸3(冰封王座)的CD-Key,比如:2KDJBC-TC2R-BVR8CY-MEJB-H62N2D2)打开"FTKey.exe",输入CD-Key,确定。3)执行"W3RegFixer.exe",选择魔兽争霸3(冰封王座)安装的目录,确定即可,目的是为_wurst支持的war3版本

FloatLabel介绍——Android EditText的一种交互实现-程序员宅基地

文章浏览阅读7.6k次。这里介绍一种EditText的交互实现,

数据库建表语句、增量添加字段,删除锁,存储过程、函数、达梦、金仓、瀚高、oracle、MySql_翰高数据库表添加字段-程序员宅基地

文章浏览阅读2.3k次。达梦 增量建表语句 增量添加字段语句 修改字段长度语句 添加注释语句 金仓 增量建表语句 增量添加字段语句 修改字段长度语句 添加注释语句 瀚高 增量建表语句 增量添加字段语句 修改字段长度语句 添加注释语句 ORACLE 增量建表语句 增量添加字段语句 修改字段长度语句 添加注释语句..._翰高数据库表添加字段

gin框架07--PureJSON-程序员宅基地

文章浏览阅读415次。gin框架07--PureJSON介绍案例说明介绍通常,JSON 使用 unicode 替换特殊 HTML 字符,例如 < 变为 \ u003c。如果要按字面对这些字符进行编码,则可以使用 PureJSON。Go 1.6 及更低版本无法使用此功能。本文主要介绍 gin 框架中的 PureJSON功能,并给出测试结果。案例源码package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default()_purejson

MapFile和BloomMapFile文件-程序员宅基地

文章浏览阅读4.4k次。一. MapFile文件 前面说过,SequenceFile文件是用来存储key-value数据的,但它并不保证这些存储的key-value是有序的,而MapFile文件则可以看做是存储有序key-value的SequenceFile文件。MapFile文件保证key-value的有序(基于key)是通过每一次写入key-value时的检查机制,这种检查机制其实很简单,就是保证当前正要写入_mapfile文件

[渝粤教育] 石家庄铁道大学 理论力学 参考 资料_质点系的动量大小之和-程序员宅基地

文章浏览阅读1.5k次。教育-理论力学-章节资料考试资料-石家庄铁道大学【】物体的受力分析1、【单选题】作用在同一刚体上的两个力F1和F2,若 F1 = - F2,则表明这两个力( )。A、必处于平衡;B、大小相等,方向相同;C、大小相等,方向相反,但不一定平衡;D、必不平衡。参考资料【 】2、【单选题】人拉车快速前进时,人拉车的力一定( )车拉人的力。A、大于B、小于C、等于D、不确定参考资料【 】3、【单选题】若要在已知力系上加上或减去一组平衡力系,而不改变原力系的作用效果_质点系的动量大小之和

随便推点

最新Android框架排行榜。_最新android 框架-程序员宅基地

文章浏览阅读312次。Android框架排行榜 1.Retrofit   一句话介绍:Retrofit是一款类型安全的网络框架,基于HTTP协议,服务于Android和java语言上榜理由:Retrofit以21.8k的stars量雄踞github中android子标题榜首,第一当之无愧。 官网地址 http://square.github.io/retrofit/ github https..._最新android 框架

基于traefik的kubernetes ingress访问-程序员宅基地

文章浏览阅读790次。目标:在k8s集群中部署traefik服务,并暴露集群jupyter服务环境:kubernetes 1.11步骤:traefik简介-&gt;traefik部署-&gt;ingress文件配置-&gt;域名访问1.traefik简介Ingress为从kubernetes集群外访问集群的入口,负责将用户的URL请求转发到集群中不同的Service上。早期Ingress使用ngin...

java label覆盖_java – 在调用set text之后,JLabel在旧文本上绘制新文本-程序员宅基地

文章浏览阅读254次。我有一个进度对话框窗口,其中包含3个JComponents:JLabel,JProgressBar,JButton,它在不同线程的应用程序的不同部分用作默认对话框窗口.因此,当我尝试更改标签的值时,它不会清除其下的背景,它只是在旧文本上绘制新文本.包装器类不会覆盖它只是将方法调用委托给它包含的组件的任何方法.这是代码:public void setNote(String note) {this.n...

分治法例题_分治法列题csdn-程序员宅基地

文章浏览阅读452次。题目来源:洛谷P1226 【模板】快速幂||取余运算a为temp, n为几次幂取余运算的性质(A+B)%b=(A%b+B%b)%b(A×B)% b = ((A%b)×(B%b))%busing namespace std;typedef long long ll;ll quickPower(int a, int b, int c) { ll ans = 1, temp = a; while(b) { if(b & 1) { ans *= temp; ans %=_分治法列题csdn

51单片机开发步骤-程序员宅基地

文章浏览阅读781次。想要从事高端嵌入式开发,首先要会用ARM与Linux,想要会用ARM与Linux,首先要会单片机,想要零基础学会单片机,就要想从51单片机开始;想要学好单片机,基础:1、C语言了解;2、微机原理与接口技术了解;想要提升开发能力,就必须要不断地实践,建议小白可以在网上(某宝)买一块51单片机开发板,自己参照课程研究研究下面我把我的经历给大家说一下,希望有志于单片机开发的童鞋能做一个参考第一步:C语言基础,建议买一本谭浩强的《C语言程序设计》,如果不想买,可以在网上找一个PDF版;微机原理与_51单片机

html打造动画【系列3】- 小猫笑脸动画-程序员宅基地

文章浏览阅读837次。猫咪容器咱们每次画一个图片,肯定先要确定一个容器,几确定一下图形的位置和大小。<div class="mao_box"> <div class="mao"></div></div>body {margin: 0px;background: #F6F7A7;}.mao_box {position: relat..._html会动的猫