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















相关文章推荐

Android: Runtime.exec()的陷阱

When Runtime.exec() won'tNavigate yourself around pitfalls related to the Runtime.exec() methodSumma...

Runtime.exec() 的陷阱

原文地址:http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4 作为Java语言的一部分。java.lang...

Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现

前言日常java开发中,有时需要通过java运行其它应用功程序,比如shell命令等。jdk的Runtime类提供了这样的方法。首先来看Runtime类的文档, 从文档中可以看出,每个java程序只会...

使用Runtime.getRuntime().exec()方法的几个陷阱 (转)

Runtime 封装着java程序的运行时环境。通过Runtime实例,java应用能够与其运行的环境连接。Runtime在jvm中保持一个单例,所以不能通过Runtime类的构造函数。只能通过Run...

调用Runtime.getRuntime().exec()执行Linux脚本防挂死和返回脚本输出

调用Runtime.getRuntime().exec()执行Linux脚本防挂死和返回脚本输出
  • NMS312
  • NMS312
  • 2014年09月04日 13:18
  • 5379

使用Runtime.getRuntime().exec()的方法调用本地mysqldump.exe备份还原数据库(路径中含有空格和数字)的方法

这个问题花费我两天时间,上网搜中文的资料大都换另一种方式解决的。说是在java中cmd不支持重定向,采用的另一种方式是得到Runtime.getRuntime().exec()的输入流,然后写到一个文...
  • CROSSCI
  • CROSSCI
  • 2012年07月20日 18:41
  • 4255

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

文章转自http://blog.csdn.net/zmyde2010/article/details/6123987; Android Runtime使得直接调用底层Linux下的可执行程序...

java Runtime.getRuntime().exec 调用系统脚本/命令注意事项

使用管道命令执行带密码执行sudo命令,在java中老是不成功今天找到方法解决了顺便整理了一下java Runtime.getRuntime().exec 调用脚本命令的注意事项。 使用管道...

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

Android Runtime使得直接调用底层Linux下的可执行程序或脚本成为可能比如Linux下写个测试工具,直接编译后apk中通过Runtime来调用或者写个脚本,apk中直接调用,省去中间层或...

Runtime exec()调用shell脚本

http://blog.csdn.net/moreorless/article/details/4182883 有时,我们需要在java程序中调用外部程序,我们可用通过Runtime.exe...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:调用Runtime.exec()的一些陷阱
举报原因:
原因补充:

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