【问题标题】:Running Java Program in another Program gives error在另一个程序中运行 Java 程序会出错
【发布时间】:2015-12-02 14:34:21
【问题描述】:

我想在我的程序中执行另一个 Java 程序。我参考了here。为了测试,我粘贴了与接受的答案显示相同的代码。我通过了一个简单的 HelloWorld 程序。程序编译完美,但出现 Main class not found 错误。

这是我的代码: 服务器.java

public static void main(String args[]) {
    try {
        runProcess("javac D:\\HelloWorld.java");
        runProcess("java D:\\HelloWorld");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

private static void printLines(String name, InputStream ins) throws Exception {
    String line = null;
    BufferedReader in = new BufferedReader(
            new InputStreamReader(ins));
    while ((line = in.readLine()) != null) {
        System.out.println(name + " " + line);
    }
}

private static void runProcess(String command) throws Exception {
    Process pro = Runtime.getRuntime().exec(command);
    printLines(command + " stdout:", pro.getInputStream());
    printLines(command + " stderr:", pro.getErrorStream());
    pro.waitFor();
    System.out.println(command + " exitValue() " + pro.exitValue());
}

HelloWorld.java:

`public static void main(String args[]){
    System.out.println("Hello World!");
}`

输出: exitValue() 0 for javac stderr: Error: Could not find or load main class D:\HelloWorld exitValue() 1 for java

在 CMD 或 IDE 上编译和运行相同的程序可以得到完美的输出。

【问题讨论】:

  • 你能展示你的代码吗?
  • HelloWorld 在包中吗?另外,您是否尝试过自己运行“java D:\\HelloWorld”命令?
  • 您在所谓的路径中有.class 文件吗? d:\HelloWorld
  • 您的课程(使用java ___ 命令运行)不会被称为D:\HelloWorld。它将被称为HelloWorldpackagename/HelloWorld
  • 不仅如此,D:\ 不会出现在类路径中,除非它被明确添加,因此如果存在类,它将永远找不到类。

标签: java


【解决方案1】:

您想从 HelloWorld 课程开始 main 吗?我认为,在这种情况下,你应该运行这样的程序:

java -cp 'D:\' HelloWorld

因此,您需要指定 ClassPath - 'D:\' 和类路径中的条目类名称 - HelloWorld。

【讨论】:

    【解决方案2】:

    为什么要努力做事?使用内联编译器 API,然后在将类本身加载到根类加载器后,只需在新类上执行 main() 方法。

    【讨论】:

    • 可能有很多原因。从不愿意将类加载到同一个类加载器(或使用类加载器制作一些棘手的东西,例如,外部代码使用与另一个版本的依赖项)到不稳定的外部程序,你不想在你的主进程中执行' t 得到 OOM 例如。具有有效字段的非常具体的问题,无需重新表述。
    猜你喜欢
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    相关资源
    最近更新 更多