0

我正在使用 java 进程来使用Runtime.exec(cmd)where cmd 生成许多其他 java 进程,如下所示:

java -cp "MyJar.jar" pkg.MyClass some-more-arguments

从命令行运行相同的命令在 windows 和 linux 中运行良好,但是当我生成的 java 进程通过它调用命令时,Runtime.exec它在 windows 中但在 linux 中无效。

在linux中我得到Exception in thread "main" java.lang.NoClassDefFoundError: pkg/MyClass

有任何想法吗?

4

2 回答 2

2

这段代码:

Process p = Runtime.getRuntime().exec("echo \"hello\"");
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
System.out.println(br.readLine());

在linux中给出这个输出:

"hello"

引号 (")。

所以我的建议是把exec-line中的引号(")去掉。在执行命令的时候并没有去掉,而是作为参数传递给外部程序。其实相当于java -cp \"MyJar.jar\" ...在提示中写。

如果您需要“-marks(MyJar.jar 可能有空格或其他东西),我建议您查看Runtime.exec(String command, String[] envp). 这甚至应该使其更加独立于平台。

于 2010-05-11T12:59:46.460 回答
2

使用 Runtime.exec(String[]),而不是 Runtime.exec(String)

于 2010-05-12T02:02:44.653 回答