我正在为命令行应用程序做前端。它很长。命令行与此类似:
public String liveShellCommand(){ String cmd="command mode --parameter arg --parameter2 arg2 --parameter3 arg3"; Runtime run = Runtime.getRuntime() ; Process pr ; try { log.progress("sending command: " +cmd); pr = run.exec( cmd ); pr.waitFor() ;
在我将“模式”开关添加到其中之前,一切似乎都可以正常工作。“模式”开关从命令行执行。我尝试了几种组合方法,将参数拆分为既不执行也不执行的数组。我认为这与“模式”不相关,因为它前面没有,也不能有。
我究竟做错了什么?
编辑:我忘了提到我所能看到的是:调试器停止在不可编译的源代码上。我正在使用netbeans,它似乎无法打印出堆栈跟踪。它在run.exec(cmd)上停止。java出问题了吗?
我能够使用ProcessBuilder来运行它,而不仅仅是失败…
它可以很好地解析“命令”,但是当我添加“命令模式”时
java.io.IOException: Cannot run program "command mode": java.io.IOException: error=2, No such file or directory
所以我无法解析。
+1用于将参数作为数组发送。
通过字符串发送所有内容可能在某些系统上有效,但在其他系统上则失败。
Process start = Runtime.getRuntime().exec(new String[] { "java", "-version" }); BufferedReader r = new BufferedReader( new InputStreamReader(start.getErrorStream())); String line = null; while ((line = r.readLine()) != null) { System.out.println(line); }
我知道您已经说过,您尝试将参数作为字符串数组发送通过,但是没有成功,但是您是否收到了其他类型的错误?如果其他程序有日志,则可能要查看出了什么问题。您可以编写一个简单的脚本,输出用于调用的参数以测试实际通过的参数。