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

原创 2015年07月08日 14:26:18

【概念】

            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;
    }















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

Runtime 封装着java程序的运行时环境。通过Runtime实例,java应用能够与其运行的环境连接。Runtime在jvm中保持一个单例,所以不能通过Runtime类的构造函数。只能通过Run...
  • xiewenbo
  • xiewenbo
  • 2013年05月10日 14:02
  • 493

linux系统中关于中断、异常、系统调用、陷阱等概念的解析

中断:是为了设备与CPU之间的通信。典型的有如服务请求,任务完成提醒等。比如我们熟知的时钟中断,硬盘读写服务请求中断。        中断的发生与系统处在用户态还是在内核态无关,只决定于EFLAGS...
  • CLP_CSDNID
  • CLP_CSDNID
  • 2016年03月23日 17:05
  • 1670

※※Java调用Runtime.exec()要注意的问题

※※Java调用Runtime.exec()要注意的问题 标签:execJavaRuntime 字体:【默认中大】 http://it.superkoo.com/#/topic/479/ ...
  • keti_xuetangyi
  • keti_xuetangyi
  • 2013年04月08日 13:03
  • 785

Javascript中的陷阱大集合

转载地址:http://www.php100.com/html/webkaifa/javascript/2013/0105/11887.html 本文主要介绍怪异的Javascrip...
  • stpeace
  • stpeace
  • 2016年03月03日 00:05
  • 1081

Android: 通过Runtime.getRuntime().exec调用底层Linux下的程序或脚本

Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能 比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用 或者写个脚本,apk中直接调...
  • jackchen95
  • jackchen95
  • 2014年05月02日 15:05
  • 12495

《C陷阱与缺陷》总结

这本书不是对C语言的批判,而是列出了一些使用C语言常见的错误,以及一些看似简单的陷阱。对于提升对C语言的使用及认识有很大的作用!         该书主要讲解了词法分析、语法分析以及语义细...
  • u011795520
  • u011795520
  • 2016年06月14日 21:37
  • 540

进程—异常控制流之陷阱篇

一、Exceptions(异常) and System Call(系统调用)1.1 陷阱 陷阱是有意为之的异常,是处理器执行程序的一条指令的结果。陷阱最重要的用途是提供用户程序和内核之间一个...
  • unclerunning
  • unclerunning
  • 2016年04月20日 00:22
  • 4187

数据分析的陷阱

1.辛普森悖论 WIKI原始连接:http://zh.wikipedia.org/wiki/%E8%BE%9B%E6%99%AE%E6%A3%AE%E6%82%96%E8%AE%BA 当人...
  • overstack
  • overstack
  • 2014年07月15日 10:14
  • 5725

Java中的陷阱题

1、找奇数:public static boolean isOdd(int i){ return i % 2 == 1; }上面的方法真的能找到所有的奇数么?A:没有考虑...
  • hutongling
  • hutongling
  • 2017年04月28日 16:14
  • 225

java顺序结构之switch分支语句陷阱

java的分支语句中,当对面情况多种疲于if else的情况下,我们大多数情况下会选择使用switch case进行判断处理不同情况。  switch结构:    switch语句由一个控制表达式...
  • wenhua_Lee
  • wenhua_Lee
  • 2015年12月24日 00:47
  • 422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:调用Runtime.exec()的一些陷阱
举报原因:
原因补充:

(最多只允许输入30个字)