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

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

问题描述:

下面给出的代码实际上会尝试运行命令。从命令提示符运行时,此命令会产生必要的输出。但是当我尝试从java代码运行应用程序时,它会继续运行并且不会生成任何输出文件。作为一个命令,它可以从cmd提示符运行正常,但不能从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); 

尝试:

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()更多比一次。

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

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

您不应将所有参数连接到一个字符串。取而代之的是,将它们传递作为独立参数来

过程EXEC(java.lang.String中[])

我想你在生成命令作出错误。

这将是

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

确保space

,并使用此exec(String[]

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

至少你缺少的参数之间的空白!

我的猜测是,你还没有在调试器中试过这个,或者打印了它试图运行的东西。

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

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

路径中不能有多个:

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

那么有几件事情错代码:需要的命令和参数和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(); 
} 

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

尝试通过在窗口中的运行/搜索输入字段粘贴此:

cmd.exe的/KC:\app1.exe 123 C:\ app2.exe -xc:\ app3.exe - SF C:\的Output.xml

的cmd.exe/K保持propmt开放执行命令