当前位置: 首页 > 面试题库 >

如何在另一个java程序中编译和运行java程序?

阎功
2023-03-14
问题内容

我有一个Main.java和Test.java类,它们要编译并在Test.java代码中运行Main.java。这是我的代码

    Process pro1 = Runtime.getRuntime().exec("javac Main.java");
    pro1.waitFor();
    Process pro2 = Runtime.getRuntime().exec("java Main");

    BufferedReader in = new BufferedReader(new InputStreamReader(pro2.getInputStream()));
    String line = null;

    while ((line = in.readLine()) != null) {
        System.out.println(line);
    }

我只在Main.java中打印“ ok”,但是此代码不打印任何内容。问题是什么 ?


问题答案:

我修改了代码以包括一些检查:

public class Laj {

  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());
  }

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

这是Main.java:

public class Main {
  public static void main(String[] args) {
    System.out.println("ok");
  }
}

当一切都很好时,它就可以工作:

alqualos@ubuntu:~/tmp$ java Laj
javac Main.java exitValue() 0
java Main stdout: ok
java Main exitValue() 0

现在,例如,如果在Main.java中出现一些错误:

alqualos@ubuntu:~/tmp$ java Laj
javac Main.java stderr: Main.java:3: package Systems does not exist
javac Main.java stderr:     Systems.out.println("ok");
javac Main.java stderr:            ^
javac Main.java stderr: 1 error
javac Main.java exitValue() 1
java Main stdout: ok
java Main exitValue() 0

它仍然显示“ ok”,因为先前编译的Main.class仍然存在,但是至少您可以看到正在运行的进程究竟发生了什么。



 类似资料:
  • 问题内容: 我想使用另一个Java程序打开Java GUI。 它已成功编译,但无法运行。它说“无法加载主类”。这是我的代码: HelloWorld类: 问题答案: 您的代码可能失败的地方有很多,例如,由于某种原因它可能无法编译;可能不在操作系统的搜索路径中;该命令可能会失败,因为参数看起来不正确。 我相信您的命令应该看起来更像或者应该在目录的上下文中执行… 您确实需要尽一切努力来诊断潜在的问题,例

  • 问题内容: 我正在编译一个简单的程序 我在命令提示符下输入了Java Test.java,但没有成功 我没有使用任何IDE 我应该在哪里将程序文件放在计算机上 谢谢 问题答案: 您不能直接运行Java源文件。您需要先使用进行编译: 然后,您将获得一个可以运行的.class文件:

  • 问题内容: 如何在Mac上用Java编译和运行程序? 我是新来的。 我还下载了一个在此向我建议的程序,称为wrangler,如果与情况有关。 问题答案: 在Mac OSX或任何主要操作系统上编译和运行Java应用程序非常容易。Apple随OSX一起提供了一个功能齐全的Java运行时和开发环境,因此您要做的就是编写Java程序并使用内置工具来编译和运行它。 编写您的第一个程序 第一步是编写一个简单的

  • 问题内容: 我正在编写一个makefile,它将一个文件编译到另一个目录中,然后我想在不更改目录的情况下运行它。我想按照以下方式做一些事情: Java文件所在的位置,并且makefile不在那里运行。 我怎样才能做到这一点? 问题答案: 我可能会误解这个问题,但是您可以使用 这将在 然后,您可以通过在类路径上包含它来运行它。例如 如果要在其他目录中生成类文件,则可以使用选项。

  • null (如果可能的话,它应该在db中创建表并生成html文件。我看到了http://velocity.apache.org/,所以是否可以使用它生成java代码。)

  • 主要内容:C++源文件的后缀,g++ 命令C++ 和C语言类似,也要经过编译和链接后才能运行。在《 C语言编译器》专题中我们讲到了 VS、Dev C++、VC 6.0、Code::Blocks、C-Free、 GCC、Xcode 等常见 IDE 或编译器,它们除了可以运行C语言程序,还可以运行 C++ 程序,步骤是一样的,这里不再赘述,读者需要留意的是 C++ 源文件的后缀,以及 GCC 中的 命令。 下图是 C/C++ 代码生成可执行文