-4

可能重复:
如何在另一个 java 程序中编译和运行 java 程序?

例如,如果我有 A.java 和 B.java,那么我想使用 A.java 编译和运行 B.java。

4

2 回答 2

6

首先,编译你的代码。我不认为你真的想像你写的那样从 A 类编译 B 类。这几乎没有任何意义。

现在,由于两者都是 java 类,您可以直接从另一个类调用一个类的方法。但是,如果您的意思2 个类是独立的程序,那么每个类都有自己的 main 方法,您可以使用Runtime.getRuntime().exec(...)或者使用ProcessBuilder.

请注意我真正写的文字。我很确定您不想从另一个调用一个 java 程序。大多数情况下,您想从另一个类调用一个类的方法,所以这样做。

于 2012-10-05T10:30:36.340 回答
0

@AlexR:IMO 这是一个有效的场景。假设您想从某个地方上传代码然后执行它,并验证输出。

尝试使用下面提到的代码:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;

    public class A {

      public static void main(String[] args) {
        try {
            Process processCompile = Runtime.getRuntime().exec("javac B.java");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Process processRun = null;
        try {
            processRun = Runtime.getRuntime().exec("java B");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            printLines(" stdout:", processRun.getInputStream());
            printLines(" stderr:", processRun.getErrorStream());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            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);
          }
        }
    }
于 2012-10-05T12:14:25.290 回答