Java调用exe阻塞

转载自  Java调用exe阻塞

今天遇到了个奇怪的问题,用VC写了个小程序,编译成exe文件,然后用Java去调,居然卡住不运行了。

如果双击这个exe程序,单独让它运行,是可以的,那么为什么用Java调用就不好使了呢?
上网查了一下,原来是由于缓冲区的问题,也就是说Process的getErrorStream和getInputStream缓冲区没有清空。我在VC里要打印的东西太多了,以至于填满了缓冲区,这是缓冲区需要释放,我不但没释放还一个劲的运行程序,那么Java就卡在那里了。表面上好像是exe出了问题,其实是这个Process的缓冲区造成的。
解决方法:
InputStream is1 = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is1)); 
try {while(br.readLine() != null) ;
} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();
}InputStream is2 = process.getErrorStream();
if(null != is2) {BufferedReader br2 = new BufferedReader(new InputStreamReader(is2)); StringBuilder buf = new StringBuilder(); // 保存输出结果流String line = null;try {while(br2.readLine() != null) ;buf.append(line);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} System.out.println("输出结果为:" + buf.toString());
}
将上述代码加入程序就可以解决缓冲区的问题,建议单独开启线程去多。
我的代码里不需要getErrorStream()部分的代码,这两部分针对实际情况自由选择。


将上述代码加入程序就可以解决缓冲区的问题,建议单独开启线程去多。
我的代码里不需要getErrorStream()部分的代码,这两部分针对实际情况自由选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中iscontinue意思_Java 中return、continue和break的区别

写在前面:适合Java初学者,大神就别来了。今天同事突然问我return和break的区别,以前觉得随口都能说出来的东西,今天突然卡了,记得模模糊糊,只能说出个大概,所以这里做一个总结,还是那…

第13步 用户模块前端(Admin)

bootstrap 就不用谢css样式 了 都写好了 http://www.bootcss.com/ https://www.bootcdn.cn/ <meta charset"utf-8"> <!-- 防止网站在手机端看变形了 --> <meta name"viewPort" content"widthdevice-width,initial…

ASP.NET Core 静态文件及JS包管理器(npm, Bower)的使用

在 ASP.NET Core 中添加静态文件 虽然ASP.NET主要大都做着后端的事情&#xff0c;但前端的一些静态文件也是很重要的。在ASP.NET Core中要启用静态文件&#xff0c;需要Microsoft.AspNetCore.StaticFiles组件。可以通过Nuget添加&#xff0c;或者在project.json配置文件中添加&…

Java 正则表达式匹配模式[贪婪型、勉强型、占有型]

转载自 Java 正则表达式匹配模式[贪婪型、勉强型、占有型]Greediness&#xff08;贪婪型&#xff09;&#xff1a;最大匹配 X?、X*、X、X{n&#xff0c;} 是最大匹配。例如你要用 “<.>” 去匹配 “a<tr>aava </tr>abb”&#xff0c;也许你所期待的结果是想…

新闻发布项目——分页公共类(PageUitl )

package bdqn.newsManageServlet.Util; /*** 分页的类* author Administrator**/ public class PageUitl {private int pagesize;//页大小private int pageindex1;//页码private int recordCount;//总记录数private int totalPageCount;//总页数//计算总页数public int getTota…

java代码配置 mybatis_配置简介(MyBatis源码篇)

1 SqlSessionFactoryBuilder#上篇例子中&#xff0c;我们以SqlSessionFactoryBuilder去创建SqlSessionFactory, 那么&#xff0c;我们就先从SqlSessionFactoryBuilder入手&#xff0c; 咱们先看看源码是怎么实现的。SqlSessionFactoryBuilder源码片段&#xff1a;public class …

js 方法传递对象参数

js 方法传递对象参数 2017年12月06日 16:35:39 qq_26676207 阅读数&#xff1a;7696 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/qq_26676207/article/details/78732117 第一步&#xff1a; //通过JSON.stringify()方…

Java8中 Date和LocalDateTime的相互转换

转载自 Java8中 Date和LocalDateTime的相互转换一.在Java 8中将Date转换为LocalDateTime 方法1: 将Date转换为LocalDatetime&#xff0c;我们可以使用以下方法&#xff1a; 1.从日期获取ZonedDateTime并使用其方法toLocalDateTime&#xff08;&#xff09;获取LocalDateTime 2…

java 时分秒格式小时8_Java里得到00:00:00格式的时分秒的Timestamp

复制代码 代码如下:import java.sql.Timestamp;import java.text.SimpleDateFormat;import java.util.TimeZone;public class Test {public static void main(String[] args) {SimpleDateFormat sdf new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");long t System.cu…

免费开源的 .NET 分布式组件库 Exceptionless Foundatio

前言 在互联网时代&#xff0c;分布式应用、系统变得越来越多&#xff0c;我们在使用 .Net 技术构建分布式系统的时候&#xff0c;需要使用到一些组件或者是助手库来帮助我们提高生产力以及应用程序解耦&#xff0c;但是纵观.Net圈&#xff0c;能够符合要求的这样的组件并不是很…

Java 8 中 Date与LocalDateTime、LocalDate、LocalTime互转

转载自 Java 8 中 Date与LocalDateTime、LocalDate、LocalTime互转Java 8中 java.util.Date 类新增了两个方法&#xff0c;分别是from(Instant instant)和toInstant()方法 // Obtains an instance of Date from an Instant object. public static Date from(Instant instant) …

mysql 删除过期日志_【转】对mysql日志进行操作的总结包括 启用,过期自动删除 等...

近段时间一直在研究mysql的日志系统,在网上看了N多mysql日志操作的文章&#xff0c;但都过于零乱&#xff0c;为了让自己以后不再搞忘&#xff0c;特作出以下总结&#xff1a;1. 以前我错误的认为mysql的日志可以恢复到任何时间的状态&#xff0c;其实并不是这样&#xff0c;这…

vo listVO paggerHelper mapper使用原则

注意 列表页面就显示这张表就好了 pageHelper 用2个mapper没有问题 xxxlistVO就好了详情哪里在展示多张表 不用分页你想链接几张表都可以 xxxVO 所有VO不要包含子对象注意一般vo对象中不可以包含对象&#xff01;&#xff01;&#xff01;&#xff01;&#xff…

Visual Studio 2015 for Linux更好地支持Linux下的开发

Visual C for Linux扩展使Visual Studio 2015的用户可以在VS2015中编写C或者C代码&#xff0c;并将代码部署到基于Linux的系统中去编译和调试。源代码和项目文件通过SSH传输到远程机上&#xff0c;程序的输出将显示在Visual Studio上。 Microsoft的Marc Goodner分享了更多有关新…

Google浏览器截长图 不需要借助任何插件!!!

1打开“谷歌浏览器”&#xff0c;右键单击网页空白处&#xff0c;然后点击“检查”。 2打开“开发者模式”&#xff0c;按“Ctrlshiftp”。 3.在输入框中输入“cpture”。 4.出现的三个模式分别为“截取全屏”、“node模式”和“当前范围”&#xff0c;选择想要的模式。 5.…

tomcat7.0.42如何设置mysql数据库连接池

转载自 tomcat7.0.42如何设置mysql数据库连接池 如何在tomcat7.0.42中设置mysql数据库连接池????eclipse如何绑定tomcat??按网上教程总不成功!怎么办server.xml<Resource name"jdbc/test" auth"Container" type"javax.sql.DataSource"…

自包含 .NET Core应用程序

.NET 是完全开源的&#xff0c;而且 .NET Core 是一个您可以免费下载的开源与跨平台 framework。您可以到 http://dot.net 获取 Mac、Windows 与大多数的 Unix 系统的版本。还可以使用免费、跨平台的 Visual Studio Code&#xff0c;用VS code您就可以随时随地编写 C# 与 F#。 …

php如何求同列元素之和_求得这个数组中各个元素之和

给定一个数组&#xff1a;$ar array(1,2,3,4,5);如果要求得这个数组中各个元素之和。方法一、很自然的用foreach实现$sum 0;foreach ($ar as $v) {$sum$v;}echo $sum;方法二、我们可以用array_reduce实现。它是专门用来迭代数组的。该函数最多接收三个参数。第一个参数接收数…