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

智能推荐

JAVA切换不了FTP服务器目录_解决linux下ftp指定访问目录无法修改的问题_豪睿刘爱上楼楼梯的博客-程序员资料

他的系统是CentOS,是RH派系的。我把vsftpd安装配置好了,以为大功告成,但客户端访问提示如下错误:500 OOPS: cannot change directory:/home/ftp原因是他的CentOS系统安装了SELinux,因为默认下是没有开启FTP的支持,所以访问时都被阻止了。//查看SELinux设置# getsebool -a|grep ftpftpd_disable_tr...

.NET实现网络爬虫_hyunbar的博客-程序员资料_.net 爬虫

爬虫的特征和运行方式User-Agent:主要用来将我们的爬虫伪装成浏览器。Cookie:主要用来保存爬虫的登录状态。连接数:主要用来限制单台机器与服务端的连接数量。代理IP:主要用来伪装请求地址,提高单机并发数量。爬虫工作的方式可以归纳为两种:深度优先、广度优先。深度优先就是一个连接一个连接的向内爬,处理完成后再换一下一个连接,这种方式对于我们来说缺点很明显。 广度优先...

c web service_简单并快乐着的博客-程序员资料

转自 http://blog.163.com/wzbwzb_187/blog/static/6632425720106424158919/ 以下是源代码: /**************filename: Server.cpp**************** 该程序通过标准socket实现简单Http服务器 运行该服务器可以通过浏览器访问服务器目录下的 Html文件和j

CMAKE错误:No CMAKE_CUDA_COMPILER could be found._luckwsm的博客-程序员资料_cmake_cuda_compiler

在使用cmake编译VTK程序过程中,执行cmake命令时,出现如下错误:-- The CUDA compiler identification is unknownCMake Error at CMakeLists.txt:4 (enable_language): No CMAKE_CUDA_COMPILER could be found. Tell CMake where to find the compiler by setting either the environment v...

Webrtc 源码分析起步_大飞飞鱼的博客-程序员资料_webrtc源码

本文是从Webrtc实际应用的方面介绍如何快速理解Webrtc的源码。Webrtc是用于web的实时通信框架,也可以直接使用Google开源的Webrtc实现来开发非Web的APP。要理解如何使用webrtc的源码,最好是先懂得Webrtc通信的流程,请查看用Webrtc实现免费的1对1高清实时视音频会议系统就可以了解Webrtc的接口使用流程,了解这个流程后就可以快速理解Google开源的那部分Webrtc源码了,并为自己使用。需要掌握Webrtc的js部分的PeerConnection,js部...

windows下qt程序意外崩溃,生成dump文件的方法_修行进行时的博客-程序员资料

程序运行一段时间之后,意外退出,没有提示任何出错信息,这种情况可能是内存泄漏,但是没有提示错误信息,很难定位到具体代码。我们可以生成dump文件,定位出错位置。在工程中添加代码:mdump.h#ifndef MDUMP1_H#define MDUMP1_H#include <Windows.h>#include <DbgHelp.h>// base...

随便推点

Maven_weixin_41249041的博客-程序员资料

maven帮助构建项目 项目和项目之间的依赖关系,管理jar包。项目管理工具,管理java项目:1、项目对象模型 POM对象模型,每个maven工程中都有一个pom.xml文件,定义工程所依赖的jar包、本工程的坐标、打包运行方式。。2、依赖管理系统(基础核心 )maven通过坐标对项目工程所依赖的jar包统一规范管理。3、maven定义一套项目生命周期清理、初始...

css教程系列5:px、em、rem区别介绍_邢晋宇的博客-程序员资料

1 PXpx像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。PX特点1. 浏览器无法调整px单位的字体,以em或rem为字体单位可调整字体。 2 EMem是相对长度单位。EM特点1. em的值并不是固定的;2. 行高:n倍的 em = n *父级元素的像素px大小(若无则*浏览器的默认字体)。3 REMrem是CSS3新增的一个相对单位(root em,根em),也是相对...

Matlab: 作图_weixin_34413357的博客-程序员资料

查看当前变量可以用who,查看当前变量及其结构,大小,类型等,可以用whos。控制图的大小figure(‘position’,[x0,y0,dx,dy]);figure(fig number);控制图例(legend)legend('leg1','leg2','Location','NorthWest');% hide the legend boxlegend boxoff...

CentOS7 安装 MYSQL5.6_LiexingVerne的博客-程序员资料

最近在学习虚拟机的下安装mysql,弄了很久最后终于搞好了(感觉自己太笨),记录下自己遇到的问题。环境:1.CentOS 7X642.mysql-5.6.45-linux-glibc2.12-x86_64.tar.gz安装步骤1.检查是否安装mariadbrpm -qa | grep mariadb如果存在就卸载rpm -e--nodeps mariadb...

@PostConstruct 与 ApplicationContextAware实现类冲突问题解决_Java充电桩的博客-程序员资料[email protected] applicationcontext

一般@PostConstruct 是可以在bean注册时执行的方法.而我们经常会需要用到spring上下文的一些参数,就可以用一个工具类如SpringContextUtilpublic class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplica

python爬取论坛付费内容_Python爬虫抓取论坛关键字过程解析_weixin_39914049的博客-程序员资料

前言:之前学习了用python爬虫的基本知识,现在计划用爬虫去做一些实际的数据统计功能。由于前段时间演员的诞生带火了几个年轻的实力派演员,想用爬虫程序搜索某论坛中对于某些演员的讨论热度,并按照日期统计每天的讨论量。这个项目总共分为两步:1.获取所有帖子的链接:将最近一个月内的帖子链接保存到数组中2.从回帖中搜索演员名字:从数组中打开链接,翻出该链接的所有回帖,在回帖中查找演员的名字获取所有帖子的链...

推荐文章

热门文章

相关标签