Runtime类

转载 2016年06月02日 11:33:59

Runtime类:是一个与JVM运行时环境有关的类,这个类是Singleton的。
1、Runtime.getRuntime()可以取得当前JVM的运行时环境,这也是在Java中唯一一个得到运行时环境的方法。
2、Runtime上其他大部分的方法都是实例方法,也就是说每次进行运行时调用时都要用到getRuntime方法。
3、Runtime中的exit方法是退出当前JVM的方法,估计也是唯一的一个吧,因为我看到System类中的exit实际上也是通过调用Runtime.exit()来退出JVM的,这里说明一下Java对Runtime返回值的一般规则(后边也提到了),0代表正常退出,非0代表异常中止,这只是Java的规则,在各个操作系统中总会发生一些小的混淆。
例如: Process pro = run.exec("javac");
        int exitVal = pro.exitValue() ;
                System.out.println("退出的值:"+exitVal);
              报错:process has not exited

原因:因为exitValue这个方法是不阻塞的,程序在调用这个方法时外部命令并没有返回所以造成了异常的出现,这里是由另外的方法来等待外部命令执行完毕的,就是waitFor方法。因为当你在一个Process上调用waitFor方法时,当前线程是阻塞的,如果外部命令无法执行结束,那么你的线程就会一直阻塞下去,这种意外会影响我们程序的执行。
例如:               int exitVal = pro.waitFor() ;
System.out.println("退出的值:"+exitVal);
效果:程序也无法执行完成,它没有输出但却一直悬在那里。
原因:因为本地的系统对标准输入和输出所提供的缓冲池有效,所以错误的对标准输出快速的写入和从标准输入快速的读入都有可能造成子进程的锁,甚至死锁。
例如:                InputStream stderr = pro.getErrorStream();
 InputStreamReader isr = new InputStreamReader(stderr);
 BufferedReader br = new BufferedReader(isr);
 String line = null;
 while ( (line = br.readLine()) != null)
 System.out.println(line);
 System.out.println("");
 int exitVal = pro.waitFor();
 System.out.println("Process exitValue: " + exitVal);
结果:有结果。为了处理好外部命令大量输出的情况,你要确保你的程序处理好外部命令所需要的输入或者输出。

 

Sun的doc里其实说明还有其他的用法:
exec(String[] cmdarray, String[] envp, File dir)
Executes the specified command and arguments in a separate process with the specified environment and working directory.
那个dir就是调用的程序的工作目录,这句其实还是很有用的。
Windows下调用程序
Process proc =Runtime.getRuntime().exec("exefile");
Linux下调用程序就要改成下面的格式
Process proc =Runtime.getRuntime().exec("./exefile");
Windows下调用系统命令
String [] cmd={"cmd","/C","copy exe1 exe2"};
Process proc =Runtime.getRuntime().exec(cmd);
Linux下调用系统命令就要改成下面的格式
String [] cmd={"/bin/sh","-c","ln -s exe1 exe2"};
Process proc =Runtime.getRuntime().exec(cmd);
Windows下调用系统命令并弹出命令行窗口
String [] cmd={"cmd","/C","start copy exe1 exe2"};
Process proc =Runtime.getRuntime().exec(cmd);
Linux下调用系统命令并弹出终端窗口就要改成下面的格式
String [] cmd={"/bin/sh","-c","xterm -e ln -s exe1 exe2"};
Process proc =Runtime.getRuntime().exec(cmd);
还有要设置调用程序的工作目录就要
Process proc =Runtime.getRuntime().exec("exeflie",nullnewFile("workpath"));
当然最好的执行系统命令的方法就是写个bat文件或是shell脚本。然后调用,那样修改和实现就简点多了。

RunTime类学习

  • 2013年09月03日 17:58
  • 2KB
  • 下载

RUNTIME_CLASS(运行时间类)

学mfc学到文档,视图和框架的时候,知道必须在这三个类的派生类的类声明 里加上DECLARE_DYNCREATE,然后在类声明外合适的地方加上IMPLEMENT_DYNCREA T...
  • ghevinn
  • ghevinn
  • 2014年03月04日 14:01
  • 8371

runtime(获取类属性等信息实例)

  • 2015年05月31日 11:06
  • 75KB
  • 下载

Java调用批处理或可执行文件和Runtime、Process类实现Java版进程管理器

Java调用批处理或可执行文件       用Java编写应用时,有时需要在程序中调用另一个现成的可执行程序或系统命令,这时可以通过组合使用Java提供的Runtime类和Process类的方法实现...
  • ljheee
  • ljheee
  • 2016年07月29日 18:31
  • 1919

第十七讲 Comparator接口、System和Runtime、数字处理工具类、MD5

导读 Comparator是一个自定义数据排序接口,实现它的子类可以是一种策略类,帮助我们完成对数据的自定义次序排列功能。 System类是一个系统标准类,可以通过它获取当前系统的各项操作参数。 Ru...

Objective-C Runtime 运行时之一:类与对象

Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时能够更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交...

Objective-C Runtime 运行时(一):类与对象

Objective-C语言是一门动态语言,动态语言相对静态语言最大的特点是把很多静态语言在编译和链接时期做的事放到了运行时来处理。这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给...

Objective-C Runtime 运行时之五:协议与分类

转自:http://blog.csdn.net/djl4104804/article/details/46681849 Objective-C中的分类允许我们通过给一个类添加方法来扩...

黑马程序员之System、Runtime、Math、Date、Calendar类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 一、System类 import java.util.Properties; /* * ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Runtime类
举报原因:
原因补充:

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