源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java执行bat命令碰到的阻塞问题的解决方法

  • 时间:2020-05-11 20:44 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java执行bat命令碰到的阻塞问题的解决方法
使用Java来执行bat命令,如果bat操作时间过长,有可能导致阻塞问题,而且不会执行bat直到关闭服务器。 如:
[u]复制代码[/u] 代码如下:
Runtime r=Runtime.getRuntime();          Process p=null;          try{              String path = "D:/test.bat";       p = r.exec("cmd.exe /c  "+path);       p.waitFor();   }catch(Exception e){        System.out.println("运行错误:"+e.getMessage());       e.printStackTrace();   } 
一般java的exec是没有帮你处理线程阻塞问题的,需要手动处理。 处理后:
[u]复制代码[/u] 代码如下:
Runtime r=Runtime.getRuntime();          Process p=null;          try{              String path = "D:/test.bat";       p = r.exec("cmd.exe /c  "+path);       StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR");                       errorGobbler.start();              StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");              outGobbler.start();       p.waitFor();      }catch(Exception e){               System.out.println("运行错误:"+e.getMessage());              e.printStackTrace();      } 
StreamGobbler 类如下:
[u]复制代码[/u] 代码如下:
package com.test.tool;    import java.io.BufferedReader;  import java.io.IOException;  import java.io.InputStream;  import java.io.InputStreamReader;  import java.io.OutputStream;  import java.io.PrintWriter;    /**  * 用于处理Runtime.getRuntime().exec产生的错误流及输出流  */  public class StreamGobbler extends Thread {      InputStream is;      String type;      OutputStream os;      StreamGobbler(InputStream is, String type) {          this(is, type, null);      }      StreamGobbler(InputStream is, String type, OutputStream redirect) {          this.is = is;          this.type = type;          this.os = redirect;      }      public void run() {          InputStreamReader isr = null;          BufferedReader br = null;          PrintWriter pw = null;          try {              if (os != null)                  pw = new PrintWriter(os);              isr = new InputStreamReader(is);              br = new BufferedReader(isr);              String line=null;              while ( (line = br.readLine()) != null) {                  if (pw != null)                      pw.println(line);                  System.out.println(type + ">" + line);                  }              if (pw != null)                  pw.flush();          } catch (IOException ioe) {              ioe.printStackTrace();            } finally{              try {                  pw.close();                  br.close();                  isr.close();              } catch (IOException e) {                  e.printStackTrace();              }          }      }  }  
运行bat,就不会阻塞了。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部