代码如下:
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
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
注释的内容也可也用,程序使用的是直接掉应用程序。
第二个是编译和执行java
#4
直接用String不用[]可以运行么?
#5
#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进行赋值呢?
谢谢...
谢谢你的例子。
但我想搞明白的是如何使用exec(String[]).
回huxiweng:
查看文档发现String[]cmdarray中的意思是:
cmdarray - array containing the command to call and its arguments.
有命令也有参数,不知道应该如何对cmdArray进行赋值呢?
谢谢...
#8
你的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)呢。
谢谢....
还是求问,如何使用exec(String[]cmdArray)呢。
谢谢....
#10
别去研究这类代码的,没啥意义,真正开发中很少会去调用本地程序!
#11
嗯谢谢提醒,只是现在我需要用到。呵呵..
#12
之前本人也想用这个数组方法的,但是没有成功,没办法,写了个for循环。要不写多个exec()方法。
#13
我现在想模拟下像eclipse那样编译源代码 和 打包程序,这些我目前想到的就是得用本地命令了。
我用.bat实现过,但java调用.bat时会有个黑框,而eclipse是没有的。我猜eclipse是不是使用了exec(String[])这是方法呢?
调用多个exec(),它们返回的Process之间是没有联系的,这样子会比较麻烦。
我用.bat实现过,但java调用.bat时会有个黑框,而eclipse是没有的。我猜eclipse是不是使用了exec(String[])这是方法呢?
调用多个exec(),它们返回的Process之间是没有联系的,这样子会比较麻烦。
#14
没有。
我之前做的是局域网内远程关闭计算机,即服务器收到关机指令后,关闭局域网内的其他所有计算机,所以我用了exec这个东西,我不需要获得Process,我只需要exec就可以了。
我之前做的是局域网内远程关闭计算机,即服务器收到关机指令后,关闭局域网内的其他所有计算机,所以我用了exec这个东西,我不需要获得Process,我只需要exec就可以了。
#15
#16
sxzlc,回答的根本不正确,而且,我试了下cd E:\\不可以,会抛出异常,但如果换成了dir/a E:\\就可以了,不知道为什么
#17
我想你这样试下:String[] cmdArray = { "cmd", " /c ","cd d:\\" };
不知行不行!
不知行不行!
#1
/c cd d:\\
这个命令不对吧。
这个命令不对吧。
#2
给你几个类子
1
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
注释的内容也可也用,程序使用的是直接掉应用程序。
第二个是编译和执行java
#4
直接用String不用[]可以运行么?
#5
#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进行赋值呢?
谢谢...
谢谢你的例子。
但我想搞明白的是如何使用exec(String[]).
回huxiweng:
查看文档发现String[]cmdarray中的意思是:
cmdarray - array containing the command to call and its arguments.
有命令也有参数,不知道应该如何对cmdArray进行赋值呢?
谢谢...
#8
你的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)呢。
谢谢....
还是求问,如何使用exec(String[]cmdArray)呢。
谢谢....
#10
别去研究这类代码的,没啥意义,真正开发中很少会去调用本地程序!
#11
嗯谢谢提醒,只是现在我需要用到。呵呵..
#12
之前本人也想用这个数组方法的,但是没有成功,没办法,写了个for循环。要不写多个exec()方法。
#13
我现在想模拟下像eclipse那样编译源代码 和 打包程序,这些我目前想到的就是得用本地命令了。
我用.bat实现过,但java调用.bat时会有个黑框,而eclipse是没有的。我猜eclipse是不是使用了exec(String[])这是方法呢?
调用多个exec(),它们返回的Process之间是没有联系的,这样子会比较麻烦。
我用.bat实现过,但java调用.bat时会有个黑框,而eclipse是没有的。我猜eclipse是不是使用了exec(String[])这是方法呢?
调用多个exec(),它们返回的Process之间是没有联系的,这样子会比较麻烦。
#14
没有。
我之前做的是局域网内远程关闭计算机,即服务器收到关机指令后,关闭局域网内的其他所有计算机,所以我用了exec这个东西,我不需要获得Process,我只需要exec就可以了。
我之前做的是局域网内远程关闭计算机,即服务器收到关机指令后,关闭局域网内的其他所有计算机,所以我用了exec这个东西,我不需要获得Process,我只需要exec就可以了。
#15
#16
sxzlc,回答的根本不正确,而且,我试了下cd E:\\不可以,会抛出异常,但如果换成了dir/a E:\\就可以了,不知道为什么
#17
我想你这样试下:String[] cmdArray = { "cmd", " /c ","cd d:\\" };
不知行不行!
不知行不行!