使用Runtime.getRuntime().exec(String[]cmdArray)时代码如下: String[] cmdArray = { "cmd /c cd d:\\" };
Runtime.getRuntime().exec(cmdArray);
报异常信息如下:java.io.IOException: Cannot run program "cmd /c cd d:\": CreateProcess error=2, ?????????
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:466)
at lab.cmd.CmdTest.exec_strArr(CmdTest.java:19)
at lab.cmd.CmdTest.main(CmdTest.java:11)
Caused by: java.io.IOException: CreateProcess error=2, ?????????
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
at java.lang.ProcessImpl.start(ProcessImpl.java:30)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 4 more
请问这是怎么回事呢?
谢谢....

解决方案 »

  1.   

    /c cd d:\\
    这个命令不对吧。
      

  2.   

    给你几个类子1package com.sxzl.test;public class TestRuntime {        public static void main(String args[]) { 
            try {         //String myArgs[] ={"http://www.csdn.com/"};
            Process process = Runtime.getRuntime().exec( 
            //"cmd.exe /c start http://www.csdn.com/"
            "C:\\Program Files\\Internet Explorer\\iexplore.exe"    
            +" http://www.csdn.com/"
            ); 
                    } catch (Exception e) { 
            e.printStackTrace(); 
            } 
            } 
            
    }2
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    public class Test {
        public static void main(String[] args) throws IOException, InterruptedException {
            Process p = Runtime.getRuntime().exec("cmd /c javac TestB.java & java TestB");
            InputStream is = p.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line = null;
            while((line=br.readLine()) !=null) {
                System.out.println(line);
            }
            br.close();
        }
    }public class TestB {
        
        public static void main(String[] args) {
            System.out.println("in TestB");
        
        }}
      

  3.   

    以上第一个位打开一个网页注释的内容也可也用,程序使用的是直接掉应用程序。第二个是编译和执行java
      

  4.   

    直接用String不用[]可以运行么?
      

  5.   


    Process exec(String command) 
              在单独的进程中执行指定的字符串命令。 
    Process exec(String[] cmdarray) 
              在单独的进程中执行指定命令和变量。 是不是和字符串数组有关?
      

  6.   

    回sxzlc:谢谢你的例子。但我想搞明白的是如何使用exec(String[]).
    回huxiweng:
    查看文档发现String[]cmdarray中的意思是:
    cmdarray - array containing the command to call and its arguments. 有命令也有参数,不知道应该如何对cmdArray进行赋值呢?谢谢...
      

  7.   


    你的String数组中只有一个字符串啊,如果有参数就在数组中添加字符串。没有直接就用String就可以了。
    // 这样编译运行通过
    String cmdArray = "cmd /c cd d:\\";
            try {
    Runtime.getRuntime().exec(cmdArray);
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      

  8.   

    我需要用到字符串数组,上面的代码只是我试着写的一个简单的例子。还是求问,如何使用exec(String[]cmdArray)呢。
    谢谢....
      

  9.   

    之前本人也想用这个数组方法的,但是没有成功,没办法,写了个for循环。要不写多个exec()方法。
      

  10.   

    我现在想模拟下像eclipse那样编译源代码 和 打包程序,这些我目前想到的就是得用本地命令了。我用.bat实现过,但java调用.bat时会有个黑框,而eclipse是没有的。我猜eclipse是不是使用了exec(String[])这是方法呢?
    调用多个exec(),它们返回的Process之间是没有联系的,这样子会比较麻烦。
      

  11.   

    没有。
    我之前做的是局域网内远程关闭计算机,即服务器收到关机指令后,关闭局域网内的其他所有计算机,所以我用了exec这个东西,我不需要获得Process,我只需要exec就可以了。
      

  12.   

    sxzlc,回答的根本不正确,而且,我试了下cd E:\\不可以,会抛出异常,但如果换成了dir/a E:\\就可以了,不知道为什么
      

  13.   

    我想你这样试下:String[] cmdArray = { "cmd", " /c ","cd d:\\" };
    不知行不行!