首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

利用Java.lang.Process跟ProcessBuilder创建本地应用程序进程

2012-10-29 
利用Java.lang.Process和ProcessBuilder创建本地应用程序进程ProcessBuilder.start()和Runtime.exec方法都

利用Java.lang.Process和ProcessBuilder创建本地应用程序进程

ProcessBuilder.start()和Runtime.exec方法都可以创建一个本地(native)进程,并且返回代表这个进程的Java Process实例.
Java.lang.process类能可以用来控制这个进程和获得进程的一些信息.

(1)调用系统命令创建进程并且获取其命令输出,使用Runtime.exec(String cmd):

首先当前的运行环境如下:

利用Java.lang.Process跟ProcessBuilder创建本地应用程序进程

?

利用Java.lang.Process跟ProcessBuilder创建本地应用程序进程程序代码如下:

程序运行结果如下:
 

?

?

然后查看这个时候生成ProcessTest1.class文件,利用jdk中的命令:javap –verbose ProcessTest1 对其反汇编,会看到此时class的major version:49,如果对JDK的版本知识有一定了解的话,就会知道此时的class就是被java5编译的,而不是Java6.

如果想了解更多可以看下表(摘自KenWu的博文):

利用Java.lang.Process跟ProcessBuilder创建本地应用程序进程

?

(3)ProcessBuilder类是J2SE 1.5在java.lang中新添加的一个新类,也可以用来创建子进程,并且比用Runtime.exec使用更方便.

利用Java.lang.Process跟ProcessBuilder创建本地应用程序进程以下代码演示了利用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

热点排行