关闭

调用Runtime.exec()的一些陷阱

标签: Runtime陷阱
175人阅读 评论(0) 收藏 举报
分类:

【概念】

            Runtime 封装着java程序的运行时环境。

    通过Runtime实例,java应用能够与其运行的环境连接。

    通过Runtime.getRuntime()来获的当前Runtime的一个实例;获得Runtime实例后,就可以通过Runtime的exec()方法在当前jvm进程外,

            启动其他进程了。

【例子】            

    启动浏览器进程来显示一个程序的帮助页面。 

【接口】

public Process exec(String command);  

public Process exec(String [] cmdArray);  

        public Process exec(String command, String [] envp);  

public Process exec(String [] cmdArray, String [] envp);  

       备注: command -- 启动进程的名称; 以及启动该进程时需要的参数。envp -- 环境相关的属性

【实际运用】

     通常,启动另外一个进程后,需要获取另外一个进程的执行结果,

     然后根据结果执行后续的流程。

     要获取外部进程的运行结果 有2种方法:

(1)调用Process的exitValue() 方法 ---->  exitValue()方法并不会等待外部进程结束。

    如果外部进程还未结束,exitValue()将会抛出IllegalThreadStateException

(2)调用Process的waitfor()方法 --- >  waitfor()方法会挂起当前线程,一直等到外部进程结束(推荐)

【本人项目经历】

      是为了完成截屏功能,截屏完之后,进行系列操作。

   /**  
     * Description :  开启截取屏幕进程
     * @return int    0 - screencap  进程正常退出       其它 - 异常
     */
    private int takeScreenShot(){ 
    	int Err = -1;
    	int exitVal = -1;
        Process mProcess = null;
        String mSavedPath = TVAd_MainActivity.getDirPath()  + "/" +  CaptureName;
        
         try {                     
        	mProcess =Runtime.getRuntime().exec("screencap -p " + mSavedPath); 
        	exitVal = mProcess.<span style="color:#ff0000;">waitFor</span>();  //  waitfor()方法会挂起当前线程,一直等到外部进程结束
          } catch (Exception e) { 
               e.printStackTrace(); 
               Log.e(TAG, "takeScreenShot():e.printStackTrace(); ");
               return Err;
          } 
        
      return exitVal;
    }















0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33336次
    • 积分:890
    • 等级:
    • 排名:千里之外
    • 原创:54篇
    • 转载:10篇
    • 译文:0篇
    • 评论:11条
    最新评论