Java.io.IOException:error=2,没有那个文件或目录。

8

我将尝试使用Runtime.getrunTime().exec来从另一个Java程序中运行Java程序。

代码:

String java_home = System.getenv("JAVA_HOME");
 String[] command = {""+java_home+"/bin/java -cp -cp /sc/sug/p-lib/*  Tdesigner -cd /pr -in ing.rsp -out /scratch/sug/ng.pla -ad -stopO "};
                try {
                    proc = Runtime.getRuntime().exec(command);
                    proc.waitFor();
                    int exitCode = proc.exitValue();
                } catch (IOException e) {
                        e.printStackTrace();
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }

它给我以下错误:

 java.io.IOException: Cannot run program "/net/sl/sc/jdk6/bin/java -cp /sc/sug/p-lib/*  Tdesigner -cd /pr -in ing.rsp -out /scratch/sug/ng.pla -ad -stopOnError ": java.io.IOException: error=2, No such file or directory
            at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
            at java.lang.Runtime.exec(Runtime.java:593)
            at java.lang.Runtime.exec(Runtime.java:466)

有人可以帮我解决这个问题吗?是不是我需要使用-cp添加单独的jar文件,而不是设置目录。

3个回答

3

尝试从命令字符串数组中删除额外的-cp,并使用数组中的单个标记:

String[] command = { java_home + "/bin/java", "-cp",
   "/sc/sug/p-lib/*", "Tdesigner", "-cd", "/pr", "-in", "ing.rsp",
   "-out", "/scratch/sug/ng.pla", "-ad", "-stopO" };

2
如果你使用exec(String[])方法,你必须将命令及其参数分别放在不同的数组元素中,而不能像你现在做的那样全部放在一个数组元素中。

String[] 命令 = {""+java_home+"/bin/java -cp /sc/sug/p-lib/* Tdesigner", "-cd", "/pr", "-in", "ing.rsp", "-out" , "/scratch/sug/ng.pla" ,"-ad", "-stopO"}; 修改了命令,但仍然出现相同的错误。:( - user1731553
1
你仍然把java -cp /sc/.../* Tdesigner作为一个字符串,需要将其分开。否则,你会尝试运行一个名为java -cp /sc/...的程序,而不是调用java并传递参数-cp等。 - Ricky Clarkson

0

我使用Scala。这是我的代码:

Runtime.getRuntime.exec(Array("/bin/bash", "-c", #your_command)).waitFor()

我认为对于其他使用Java的人来说很容易理解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接