如何使用Runtime.getRuntime().exec(String[]cmdArray)

时间:2022-05-13 20:31:42
使用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


请问这是怎么回事呢?


谢谢....

17 个解决方案

#1


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

#2


给你几个类子

1

package 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


该回复于2010-08-05 10:45:51被版主删除

#6



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



是不是和字符串数组有关?

#7


回sxzlc:

谢谢你的例子。

但我想搞明白的是如何使用exec(String[]).


回huxiweng:
查看文档发现String[]cmdarray中的意思是:
cmdarray - array containing the  command to call and its  arguments

有命令也有参数,不知道应该如何对cmdArray进行赋值呢?

谢谢...

#8


引用 7 楼 sodino 的回复:
回sxzlc:

谢谢你的例子。

但我想搞明白的是如何使用exec(String[]).


回huxiweng:
查看文档发现String[]cmdarray中的意思是:
cmdarray - array containing the command to call and its arguments. 

有命令也有参数,不知道应该如何对cmdArray进行赋值呢?
……


你的String数组中只有一个字符串啊,如果有参数就在数组中添加字符串。没有直接就用String就可以了。


// 这样编译运行通过
String cmdArray = "cmd /c cd d:\\";
        try {
Runtime.getRuntime().exec(cmdArray);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

#9


我需要用到字符串数组,上面的代码只是我试着写的一个简单的例子。

还是求问,如何使用exec(String[]cmdArray)呢。


谢谢....

#10


别去研究这类代码的,没啥意义,真正开发中很少会去调用本地程序!

#11


引用 10 楼 bao110908 的回复:
别去研究这类代码的,没啥意义,真正开发中很少会去调用本地程序!


嗯谢谢提醒,只是现在我需要用到。呵呵..

#12


引用 11 楼 sodino 的回复:
引用 10 楼 bao110908 的回复:

别去研究这类代码的,没啥意义,真正开发中很少会去调用本地程序!


嗯谢谢提醒,只是现在我需要用到。呵呵..

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

#13


我现在想模拟下像eclipse那样编译源代码 和 打包程序,这些我目前想到的就是得用本地命令了。

我用.bat实现过,但java调用.bat时会有个黑框,而eclipse是没有的。我猜eclipse是不是使用了exec(String[])这是方法呢?


调用多个exec(),它们返回的Process之间是没有联系的,这样子会比较麻烦。

#14


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

#15


该回复于2010-12-03 09:34:03被版主删除

#16


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

#17


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

#1


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

#2


给你几个类子

1

package 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


该回复于2010-08-05 10:45:51被版主删除

#6



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



是不是和字符串数组有关?

#7


回sxzlc:

谢谢你的例子。

但我想搞明白的是如何使用exec(String[]).


回huxiweng:
查看文档发现String[]cmdarray中的意思是:
cmdarray - array containing the  command to call and its  arguments

有命令也有参数,不知道应该如何对cmdArray进行赋值呢?

谢谢...

#8


引用 7 楼 sodino 的回复:
回sxzlc:

谢谢你的例子。

但我想搞明白的是如何使用exec(String[]).


回huxiweng:
查看文档发现String[]cmdarray中的意思是:
cmdarray - array containing the command to call and its arguments. 

有命令也有参数,不知道应该如何对cmdArray进行赋值呢?
……


你的String数组中只有一个字符串啊,如果有参数就在数组中添加字符串。没有直接就用String就可以了。


// 这样编译运行通过
String cmdArray = "cmd /c cd d:\\";
        try {
Runtime.getRuntime().exec(cmdArray);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

#9


我需要用到字符串数组,上面的代码只是我试着写的一个简单的例子。

还是求问,如何使用exec(String[]cmdArray)呢。


谢谢....

#10


别去研究这类代码的,没啥意义,真正开发中很少会去调用本地程序!

#11


引用 10 楼 bao110908 的回复:
别去研究这类代码的,没啥意义,真正开发中很少会去调用本地程序!


嗯谢谢提醒,只是现在我需要用到。呵呵..

#12


引用 11 楼 sodino 的回复:
引用 10 楼 bao110908 的回复:

别去研究这类代码的,没啥意义,真正开发中很少会去调用本地程序!


嗯谢谢提醒,只是现在我需要用到。呵呵..

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

#13


我现在想模拟下像eclipse那样编译源代码 和 打包程序,这些我目前想到的就是得用本地命令了。

我用.bat实现过,但java调用.bat时会有个黑框,而eclipse是没有的。我猜eclipse是不是使用了exec(String[])这是方法呢?


调用多个exec(),它们返回的Process之间是没有联系的,这样子会比较麻烦。

#14


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

#15


该回复于2010-12-03 09:34:03被版主删除

#16


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

#17


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