`
happy20070302
  • 浏览: 94996 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

用java调用windows

    博客分类:
  • j2se
阅读更多


等待命令执行结束用waitFor(),其返回值就是命令的返回值
如果出现程序执行被挂起,没有任何反应的情况,是由于没有读取命令子进程的正常输出流或错误输出流导致缓冲区被占满,进程被锁住。这个时候需要把输出流中的内容给读出来。最好的做法是使用两个线程,分别同时读取正常输出流和错误输出流。
执行Windows平台上的命令时使用cmd.exe /C,如cmd.exe /C dir。
记得关闭命令子进程的输入流,通过Process.getOutputStream().close(),这样不会导致命令子进程被锁住。
仿照上面的文章,写了一个简单的例子:
Java代码
package cmd;  
 
import java.io.BufferedReader;  
import java.io.InputStream;  
import java.io.InputStreamReader;  
 
class StreamDrainer implements Runnable {  
    private InputStream ins;  
 
    public StreamDrainer(InputStream ins) {  
        this.ins = ins;  
    }  
 
    public void run() {  
        try {  
            BufferedReader reader = new BufferedReader(  
                    new InputStreamReader(ins));  
            String line = null;  
            while ((line = reader.readLine()) != null) {  
                System.out.println(line);  
            }  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
 
}  
 
public class TestRunCmd {  
 
    public static void main(String[] args) {  
        String[] cmd = new String[] { "cmd.exe", "/C", "wmic process get name" };  
        try {  
            Process process = Runtime.getRuntime().exec(cmd);  
              
            new Thread(new StreamDrainer(process.getInputStream())).start();  
            new Thread(new StreamDrainer(process.getErrorStream())).start();  
              
            process.getOutputStream().close();  
 
            int exitValue = process.waitFor();  
            System.out.println("返回值:" + exitValue);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
 
    }  
 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics