Java调用exe阻塞
生活随笔
收集整理的這篇文章主要介紹了
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()部分的代碼,這兩部分針對實際情況自由選擇。
總結
以上是生活随笔為你收集整理的Java调用exe阻塞的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 调用EXE
- 下一篇: Alfahosting——为数字世界的初