生活随笔
收集整理的這篇文章主要介紹了
Java Process.exitValue Process.waitFor()
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
http://gohands.blogbus.com/logs/172834178.html
Process.exitValue() 采用非阻塞的方式返回,如果沒有立即拿到返回值,則拋出異常
Process.waitFor() 當(dāng)前線程等待,如有必要,一直要等到由該 Process 對(duì)象表示的進(jìn)程已經(jīng)終止。但是如果我們在調(diào)用此方法時(shí),如果不注意的話,很容易出現(xiàn)主線程阻塞,Process也掛起的情況。在調(diào)用waitFor() 的時(shí)候,Process需要向主線程匯報(bào)運(yùn)行狀況,所以要注意清空緩存區(qū),即InputStream和ErrorStream,在網(wǎng)上,很多只提到處理 InputStream,忽略了ErrorStream。以下一段代碼,貼出來,僅做參考。
import ?java.io.BufferedReader;?? import ?java.io.IOException;?? import ?java.io.InputStream;?? import ?java.io.InputStreamReader;?? import ?java.util.List;?? ?? public ? class ?Temp? implements ?Runnable?{?? ?? ????public ? void ?run()?{?? ?? ????????String?PATH_TO_SWF?=?"D:\\Program?Files\\SWFTools\\pdf2swf.exe" ;?? ????????String?fromFilename?=?"G:\\test\\read\\suanfa.pdf" ;?? ????????String?saveFilename?=?"G:\\test\\read\\xiaoxiaoxxx.swf" ;?? ?? ????????List?command?=?new ?java.util.ArrayList();?? ????????command.add(PATH_TO_SWF);?? ????????command.add("-o" );?? ????????command.add(saveFilename);?? ????????command.add("-t" );?? ????????command.add(fromFilename);?? ????????command.add("-s" );?? ????????command.add("languagedir=" ?+? "G:\\test\\read\\xpdf\\chinese-simplified" );?? ?? ????????ProcessBuilder?builder?=?new ?ProcessBuilder();?? ????????builder.command(command);?? ?? ????????try ?{?? ????????????Process?convertImgProcess?=?builder.start();?? ????????????final ?InputStream?is1?=?convertImgProcess.getInputStream();?? ????????????final ?InputStream?is2?=?convertImgProcess.getErrorStream();?? ????????????new ?Thread()?{?? ????????????????public ? void ?run()?{?? ????????????????????BufferedReader?br?=?new ?BufferedReader(?? ????????????????????????????new ?InputStreamReader(is1));?? ????????????????????try ?{?? ????????????????????????String?lineB?=?null ;?? ?? ????????????????????????while ?((lineB?=?br.readLine())?!=? null )?{?? ????????????????????????????if ?(lineB?!=? null )?System.out.println(lineB);?? ?? ????????????????????????}?? ????????????????????}?catch ?(IOException?e)?{?? ????????????????????????e.printStackTrace();?? ????????????????????}?? ????????????????}?? ????????????}.start();?? ?? ????????????new ?Thread()?{?? ????????????????public ? void ?run()?{?? ?? ????????????????????BufferedReader?br2?=?new ?BufferedReader(?? ????????????????????????????new ?InputStreamReader(is2));?? ????????????????????try ?{?? ?? ????????????????????????String?lineC?=?null ;?? ????????????????????????while ?((lineC?=?br2.readLine())?!=? null )?{?? ?? ????????????????????????????if ?(lineC?!=? null )?System.out.println(lineC);?? ????????????????????????}?? ????????????????????}?catch ?(IOException?e)?{?? ????????????????????????e.printStackTrace();?? ????????????????????}?? ????????????????}?? ????????????}.start();?? ????????????convertImgProcess.waitFor();?? ????????}?catch ?(Exception?e)?{?? ????????????System.err.println(e);?? ????????}?? ????}?? }?
?
總結(jié)
以上是生活随笔為你收集整理的Java Process.exitValue Process.waitFor()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。