一。以下是一个动态编译,运行java程序的完整实例:package cai.dynamiccompile.compile;
import java.lang.reflect.Method;
import com.sun.tools.javac.Main;
@SuppressWarnings("unchecked")
public class MyCompile {
public static void main(String[] args) throws Exception{
Main javac = new Main();
String fileName = System.getProperty("user.dir")+ "//src//cai//dynamiccompile//compile//BeCompiled.java";
String str[] = new String[]{fileName};
int status = javac.compile(str);
System.out.println("status: " + status);
try {
// 访问这个类
Class cls = Class.forName("cai.dynamiccompile.compile.BeCompiled");
//映射main方法
Method main = cls.getMethod("main",new Class[] { String[].class });
//执行main方法
main.invoke(null, new Object[] { new String[0] });
}catch (SecurityException se) {
se.printStackTrace();
}
}
}
package cai.dynamiccompile.compile;
public class BeCompiled {
public BeCompiled() {
System.out.println("program is running in the class construction!");
}
public static void main(String[] args) {
System.out.println("program is running in main class!");
}
}
注释说明:
(1) Class.forName("cai.dynamiccompile.compile.BeCompiled")中的"cai.dynamiccompile.compile.BeCompiled"一定要在项目的classpath下,即程序在MyEclipse的目录结构如下: