例如,如果我有 A.java 和 B.java,那么我想使用 A.java 编译和运行 B.java。
问问题
18214 次
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 回答