如何从另一个java程序调用java程序?

时间:2012-10-05 10:24:38

标签: java

  

可能重复:
  how to compile & run java program in another java program?

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

2 个答案:

答案 0 :(得分:6)

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

现在,既然两个都是java类,你可以直接从另一个类调用一个类的方法。但是,如果您的确实意味着2个类是独立程序,那么每个类都有自己的主方法,您可以使用Runtime.getRuntime().exec(...)或使用ProcessBuilder从另一个应用程序运行一个应用程序。

请注意我写的真的。我很确定你不想从另一个调用一个java程序。大多数机会是你想要从另一个类调用一个类的方法,所以这样做。

答案 1 :(得分: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);
          }
        }
    }