一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java 進程執行外部程序造成阻塞的一種原因

Java 進程執行外部程序造成阻塞的一種原因

2019-11-16 14:01java教程網 JAVA教程

前一陣子在研究文檔展示時使用了java進程直接調用外部程序,其中遇到一個問題花了好長時間才解決,這個問題就是外部程序直接執行沒什么問題,但是當使用Java進程執行時外部程序就阻塞在那兒不動了。而且這個外部程序在處理某

查了好多資料,差點就動手翻Java源碼了,最后結合一篇文章(忘記出處了),想到了輸出流會阻塞進程執行。 Java進程執行有一個輸入流,兩個輸出流(相對于外部程序)。當兩個輸出流有內容輸出,而Java執行程序沒有及時清空輸出流時就會阻塞進程。 
現貼出代碼,希望能幫助到有需要的同行: 

 

復制代碼代碼如下:

/**
  * pdf轉swf函數
  * @param path 輸入輸出文件路徑
  * @param inputFileName 輸入文件名
  * @param outputFileName 輸出文件名
  * @return File 生成的swf文件
  */
 private static File toSwf(String sourceFile, String destFile, String command) {
  long beginTime = System.nanoTime();
  Runtime rt = Runtime.getRuntime();
  try {
   Process process = rt.exec(command);

   final InputStream isNormal = process.getInputStream();
   new Thread(new Runnable() {
       public void run() {
           BufferedReader br = new BufferedReader(new InputStreamReader(isNormal)); 
           StringBuilder buf = new StringBuilder();
     String line = null;
     try {
      while((line = br.readLine()) != null){
       buf.append(line + "\n");
      }
     } catch (IOException e) {
      e.printStackTrace();
     }
     System.out.println("輸出結果為:" + buf);
       }
   }).start(); // 啟動單獨的線程來清空process.getInputStream()的緩沖區

   InputStream isError = process.getErrorStream();
   BufferedReader br2 = new BufferedReader(new InputStreamReader(isError)); 
   StringBuilder buf = new StringBuilder();
   String line = null;
   while((line = br2.readLine()) != null){
    buf.append(line + "\n");
   }
   System.out.println("錯誤輸出結果為:" + buf);

   try {
    process.waitFor();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }

 

  } catch (IOException e) {
   e.printStackTrace();
  }
  long endTime = System.nanoTime();
  System.out.println("轉swf耗時: " + (endTime - beginTime) / 1000000000 + " 秒  " + sourceFile);
  return new File(destFile);
 }

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 丝袜高跟小说 | 出差上的少妇20p | 草莓污污 | 亚洲乱码一二三四区国产 | 国产成人精品一区二三区 | 阿 好深 快点 老师受不了 | 精品无码国产AV一区二区三区 | 农村美女沟厕嘘嘘被偷看 | yy6080午夜国产免费福利 | 99精品久久99久久久久久 | 国产精品久久亚洲一区二区 | 亚洲人成毛片线播放 | 麻豆网站在线免费观看 | 满溢游泳池免费土豪全集下拉版 | 日本福利视频一区 | 欧美久在线观看在线观看 | 亚洲图片综合区 | 久久精品热在线观看30 | 黄动漫软件车车好快的车车 | 欧美另类xxx精品人妖 | 日本一道高清不卡免费 | 天天操免费视频 | 国产综合亚洲欧美日韩一区二区 | 日本中文字幕黑人借宿影片 | 国产xx肥老妇视频奂费 | 国产精品原创巨作无遮挡 | 色综合久久综精品 | 欧美精品国产一区二区三区 | 精品一区二区国语对白 | lubuntu网页版在线 | 国产成人精品一区二区阿娇陈冠希 | 性色生活片在线观看 | 91香蕉视频在线 | 手机国产乱子伦精品视频 | 天堂成人影院 | 日韩播放| 久久er国产免费精品 | 亚洲国产一区二区a毛片 | 国产一区二区三区四区波多野结衣 | 高清免费毛片 | 好湿好紧太硬了我太爽了h 好湿好滑好硬好爽好深视频 |