http://gohands.blogbus.com/logs/172834178.html
Process.exitValue() 采用非阻塞的方式返回,如果沒有立即拿到返回值,則拋出異常
Process.waitFor() 當前線程等待,如有必要,一直要等到由該 Process 對象表示的進程已經終止。但是如果我們在調用此方法時,如果不注意的話,很容易出現主線程阻塞,Process也掛起的情況。在調用waitFor() 的時候,Process需要向主線程匯報運行狀況,所以要注意清空緩存區,即InputStream和ErrorStream,在網上,很多只提到處理 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);?? ????????}?? ????}?? }?
?
總結
以上是生活随笔為你收集整理的Java Process.exitValue Process.waitFor()的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。