利用Java.lang.Process和ProcessBuilder创建本地应用程序进程
ProcessBuilder.start()和Runtime.exec方法都可以创建一个本地(native)进程,并且返回代表这个进程的Java Process实例.
Java.lang.process类能可以用来控制这个进程和获得进程的一些信息.
(1)调用系统命令创建进程并且获取其命令输出,使用Runtime.exec(String cmd):
首先当前的运行环境如下:
![]()
?
程序代码如下:
程序运行结果如下:?
?
然后查看这个时候生成ProcessTest1.class文件,利用jdk中的命令:javap –verbose ProcessTest1 对其反汇编,会看到此时class的major version:49,如果对JDK的版本知识有一定了解的话,就会知道此时的class就是被java5编译的,而不是Java6.
如果想了解更多可以看下表(摘自KenWu的博文):
?
(3)ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,也可以用来创建子进程,并且比用Runtime.exec使用更方便.
以下代码演示了利用ProcessBuilder实现(2)中的显示Java运行环境的功能:
public class ProcessTest2 { public static void main(String[] args) throws InterruptedException, IOException { ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "java", "-version"); // 如果将值设置为 true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。// 在此情况下,合并的数据可从 Process.getInputStream() 返回的流读取 pb.redirectErrorStream(true); pb.directory(new File( "D:/eclipse2/workspace/RegExpProject/com/test/process")); String path = pb.environment().get("Path"); pb.environment().put("Path", "C:/Program Files/Java/jdk1.5.0_06/bin"); pb.environment().put("JAVA_HOME", "C:/Program Files/Java/jdk1.5.0_06"); Process ps = pb.start(); Scanner scanner = new Scanner(ps.getInputStream()); StringBuilder result = new StringBuilder(); while (scanner.hasNextLine()) { result.append(scanner.nextLine()); result.append(System.getProperty("line.separator")); } scanner.close(); System.out.println(result.toString()); }}?PS:本文中的源码下载:processtest.zip