-4

重複の可能性:
別のJavaプログラムでJavaプログラムをコンパイルして実行する方法は?

たとえば、A.java と B.java がある場合、A.java を使用して B.java をコンパイルおよび実行します。

4

2 に答える 2

6

まず、コードをコンパイルします。あなたが書いたように、クラスAからクラスBを本当にコンパイルしたいとは思いません。これではほとんど意味がありません。

どちらも Java クラスなので、あるクラスのメソッドを別のクラスから直接呼び出すことができます。ただし、2 つのクラスが独立したプログラムであり、それぞれに独自の main メソッドがあることを本当にRuntime.getRuntime().exec(...)意味している場合は、または を使用して、別のアプリケーションから 1 つのアプリケーションを実行できますProcessBuilder

本当に私が書いた言葉に注意してください。あるJavaプログラムから別の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 に答える