可能重复:
how to compile & run java program in another java program?
例如,如果我有A.java和B.java,那么我想使用A.java编译和运行B.java。
答案 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);
}
}
}