动态编译,运行java程序
2010-09-08 20:40
543 查看
一。以下是一个动态编译,运行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的目录结构如下:
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的目录结构如下:
相关文章推荐
- 动态编译、运行JAVA程序
- Java动态编译和运行
- 动态编译JAVA程序
- Java 运行时动态编译源代码原理和实现
- 如何配置EditPlus编译运行Java程序?
- 使用Sublime Text快速编译运行java程序
- 编译运行java程序
- 配置EditPlus使其可以编译运行java程序
- 张孝祥系列课程1:Java程序的“一次编译,到处运行”原理
- 用Sublime Text 2编译和运行JAVA程序(windows/Ubuntu)
- 在 Sublime Text 2 中编译和运行 Java 程序
- Java实现运行时编译并动态调用
- java的内存管理,是靠GC即垃圾回收程序来实现的,GC其实也是一个程序,是怎么编译、运行的?
- 在Sublime Text 3中配置编译和运行Java程序
- java程序包含第三方库,在dos下编译和运行
- 如何使用命令行编译运行java程序
- Google Protocol Buffers自带c++,java,python例子程序编译运行
- JDK安装、配置以及编译运行我第一个JAVA程序
- 采用JDK工具编译运行java程序
- Java程序编译和运行的过程【转】