【问题标题】:Runtime.exec() gives Error: Could not find or load main classRuntime.exec() 给出错误:无法找到或加载主类
【发布时间】:2011-11-12 18:45:05
【问题描述】:

我的 Eclipse 项目中的“Street.class”位于包 trafficcircle 的 \bin 下。下面的错误来自创建进程的stderror;我以为 Runtime.exec 如果找不到它会首先抱怨...这是怎么回事?

运行“Street”进程的代码:

    Process process = runtime.exec("java -classpath \\bin trafficcircle.Street 1 2");

“街道”在哪里:

public class Street {

/**
 * @param args
 * 0 - Simulation run time
 * 1 - Flow time interval
 */
public static void main(String[] args) {
    System.out.println(args[0]);
    System.out.println(args[1]);
    System.out.flush();
}
}

进程打印出来:

错误:无法找到或加载主类 trafficcircle.Street

进程退出值:1

是的,这适用于 cmd 行:

C:\Users\Brent>java -classpath "D:\Java Programs\IPCTrafficCircle\bin" trafficcircle.Street 1 2

【问题讨论】:

  • 您为什么要尝试使用Runtime.exec() 来运行带有java.exe 的Eclipse 生成的代码?仅供参考,Eclipse 有一个运行按钮。我看不出你想要完成什么。
  • 你在哪里运行有exec(...)命令的类?
  • 这样我就不用每次想测试都按几次运行按钮了。该程序将是一个进程间通信模拟,它创建进程并让它们进行通信(用于学校)。
  • wannik,该代码在我的 Eclipse 项目\bin\Main.class 中。我只需按下 eclipse 运行按钮即可运行 Main。

标签: java


【解决方案1】:

通过键入命令行java Test,在文件夹/bin 中运行时,此代码给出了预期的结果。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Test {
    public static void main(String[] args) throws Exception {
        Process process = Runtime.getRuntime().exec(
                "java trafficcircle.Street 1 2");

        BufferedReader br = new BufferedReader(new InputStreamReader(
                process.getInputStream()));
        String line;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
        br.close();
    }
}

但是,它在 Eclipse 中运行时不会给出任何结果。为了得到结果,我必须设置类路径。

"java -cp /Users/wannik/Java/Workspace/MyProject/bin trafficcircle.Street 1 2");

【讨论】:

  • 感谢您的确认。我也必须在 Eclipse 中使用完整路径。
【解决方案2】:
如果 java 没有找到,

Runtime.exec() 会抱怨,这是您正在运行的进程。您正在阅读的消息来自该进程的输出。

您是否注意到您正在执行的内容与您在命令行上执行的内容之间存在差异? 这就是的问题。

您正在执行的 java JVM 需要能够找到您希望它运行的类。您提供的类路径 (\bin) 不正确。

【讨论】:

  • 好的,所以它没有将我的项目视为工作目录,因此我不能使用相对路径?
  • \bin 不是相对路径,而是绝对路径。 .\bin 将是一个相对路径,如果这是你的结构方式。
  • 是的,使用绝对路径有效...但不能跨机器工作。
猜你喜欢
  • 2012-09-13
  • 2016-06-12
  • 2016-03-16
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多