作为命令,它可以从cmd提示符运行,但不能从java代码运行

时间:2011-04-21 08:36:36

标签: java command-line

下面给出的代码实际上尝试运行命令。从命令提示符运行时,此命令会生成必要的输出。但是当我尝试从java代码运行应用程序时,它会继续运行并且不会生成任何输出文件。

String arg[]={"C:\\app1.exe", "C:\\app2.exe", "c:\\app3.exe"};
String pwd[]={"123","-x","-sf"};
String outputfile="c:\\output.xml"
String command=arg[0]+pwd[0]+arg[1]+pwd[1]+arg[2]+pwd[2]+output;
Process pr=rt.exec(command);

8 个答案:

答案 0 :(得分:2)

String command=arg[0]+pwd[0]+arg[1]+pwd[1]+arg[2]+pwd[3]+output;

至少你错过了参数之间的空格!

答案 1 :(得分:1)

您不应将所有参数连接到一个字符串。相反,将它们作为单独的参数传递给

  

处理exec(java.lang.String [])

答案 2 :(得分:0)

尝试:

String[] command = new String[] { arg[0], pwd[0], arg[1], pwd[1],
                                  arg[2], pwd[2], output };

这假设您要运行的命令是

C:\app1.exe 123 C:\app2.exe -x C:\app3.exe -sf c:\output.xml

如果您真的想要运行三个单独的命令,则必须多次运行exec()

有关详细信息,请参阅http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html#exec(java.lang.String[])处的javadoc。

编辑:正如另一位回答者指出的那样,没有pwd[3]

答案 3 :(得分:0)

我认为你在生成命令时犯了错误。

这将是

C:\\app1.exe123C:\\app2.exe-xc:\\app3.exe-sfc:\\output.xml 

确保space

并使用此exec(String[]

答案 4 :(得分:0)

我的猜测是你没有在调试器中试过它或打印它试图运行的内容。

我的猜测是,当你进行编译时,你没有一个叫做的命令。

C:\app1.exe123C:\app2.exe-xc:\app3.exe-sfc:\output.xml

路径中不能有多个:

答案 5 :(得分:0)

您连接所有命令和参数,但不要在命令和参数之间插入空格。 所以你的命令看起来像这样:“C:\ app1.exe123C:\ app2.exe-xc:\ app3.exe -sfc:\ output.xml” 并且pwd [3]也不存在。你有一个包含3个元素的数组,所以最高元素是pwd [2]。你应该在这里得到和ArrayIndexOutOfBoundsException(或者它只是一个复制粘贴错误)?

答案 6 :(得分:0)

代码有几个问题:

命令和参数之间需要一个空格,pwd [3]超出范围。我运行了这段代码,但它确实有用。

String arg[]={"C:\\app1.exe", "C:\\app2.exe", "c:\\app3.exe"};
String pwd[]={" 123"," -x"," -sf"};
String outputfile="c:\\output.xml";
String command=arg[0]+pwd[0]+arg[1]+pwd[1]+arg[2]+pwd[2]+outputfile;
try {
    Process pr=Runtime.getRuntime().exec(command);
} catch (IOException e) {
    e.printStackTrace();
}

答案 7 :(得分:0)

如果您的应用程序“app1”,“app2”...是从命令提示符运行的,则需要先打开它。 首先启动cmd.exe。 然后正如其他人建议在app和参数之间添加空格。

尝试在windows中的运行/搜索输入字段中粘贴它:

  

cmd.exe / K C:\ app1.exe 123 C:\ app2.exe   -x c:\ app3.exe -sf c:\ output.xml

cmd.exe / K在执行命令后保持propmt打开