静态网站开发百科,百度搜索引擎收录入口,品牌战略咨询公司,汕头seo建站转载自 Java调用exe阻塞
今天遇到了个奇怪的问题#xff0c;用VC写了个小程序#xff0c;编译成exe文件#xff0c;然后用Java去调#xff0c;居然卡住不运行了。如果双击这个exe程序#xff0c;单独让它运行#xff0c;是可以的#xff0c;那么为什么用Java调用就不好…转载自 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()部分的代码这两部分针对实际情况自由选择。