最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java執(zhí)行bat命令碰到的阻塞問題的解決方法

 更新時(shí)間:2014年01月21日 17:38:00   作者:  
這篇文章主要介紹了java執(zhí)行bat命令碰到的阻塞問題的解決方法,有需要的朋友可以參考一下

使用Java來執(zhí)行bat命令,如果bat操作時(shí)間過長,有可能導(dǎo)致阻塞問題,而且不會執(zhí)行bat直到關(guān)閉服務(wù)器。
如:

復(fù)制代碼 代碼如下:

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("運(yùn)行錯(cuò)誤:"+e.getMessage()); 
     e.printStackTrace();  

一般java的exec是沒有幫你處理線程阻塞問題的,需要手動(dòng)處理。
處理后:

復(fù)制代碼 代碼如下:

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("運(yùn)行錯(cuò)誤:"+e.getMessage()); 
            e.printStackTrace();  
   } 

StreamGobbler 類如下:

復(fù)制代碼 代碼如下:

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產(chǎn)生的錯(cuò)誤流及輸出流
 */ 
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(); 
            } 
        } 
    } 
}  

運(yùn)行bat,就不會阻塞了。

相關(guān)文章

最新評論

浦北县| 高清| 濉溪县| 金秀| 美姑县| 连南| 华容县| 从化市| 德州市| 唐河县| 建宁县| 深圳市| 济源市| 南城县| 长宁区| 栾城县| 江油市| 定边县| 乐山市| 乌兰浩特市| 兴山县| 罗山县| 满城县| 阳新县| 新竹县| 武鸣县| 榆林市| 高青县| 舟曲县| 英德市| 永修县| 田林县| 大港区| 淮南市| 金乡县| 青州市| 昌吉市| 锡林浩特市| 鹤庆县| 贡嘎县| 山丹县|