2

好的,问题来了:我有 3 个类 MyClass1 和 MyClass2 以及 ExecClass。我转到命令提示符并执行以下操作:

$java MyClass1 -exec "java MyClass2 arg1 arg2"

效果很好。现在在 ExecClass 我有以下行:

Runtime.getRuntime().exec("java MyClass1 -exec \"java MyClass2 arg1 arg2\"");

问题是如果您打印第二个字符串与第一个字符串完全相同,但是当我的 ExecClass 运行它时 MyClass1 抱怨:无法识别的参数 arg1 并失败。经过一番调试,我发现在第一种情况下,当我直接从终端调用时,引号中的整个字符串是 1 个参数(arg[1]),而在第二种情况下,arg.length = 5 和它基本上将它们分开......出于一些我不知道的原因。我只需要知道一个解决方法,如果有人知道,也就是我的 Runtime.exec() 可以工作。PS:在我的 Windows 机器上,这样的问题不仅仅发生在 linux 上。这是一个 ubuntu 破坏内核:2.6.32-279.14.1.el6.x86_64。

4

1 回答 1

4

Runtime.execsystem()其他语言中的 -like 函数不同,它不会调用 shell 来解析命令(双引号字符串是 shell 功能)。

要以您想要的方式拆分字符串,请使用接受 String 数组的 Runtime.exec:

Runtime.getRuntime().exec(new String[] { "java", "MyClass1", "-exec", "java MyClass2 arg1 arg2"});
于 2013-01-26T04:50:05.247 回答