首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

动态运作Java代码

2012-11-01 
动态运行Java代码有些情况下,我们不得不动态运行Java代码,以便提供更加灵活的方式,以下代码可参考(在JDK 1

动态运行Java代码

有些情况下,我们不得不动态运行Java代码,以便提供更加灵活的方式,以下代码可参考(在JDK 1.5+平台上运行通过):

public static void main(String[] args) {//PrintWriter out;//PrintStream myOut = new PrintStream(out);//System.setOut(myOut);//System.setErr(myOut);int i = 10;String code = "System.out.println("Hello World!"+(13+2*5/3));";code += "for(int i=0;i<" + i + ";i++){";code += " System.out.println(Math.pow(i,2));";code += "}";try {run(code);} catch (Exception e) {e.printStackTrace();}}private synchronized static File compile(String code) throws Exception {File file = File.createTempFile("JavaRuntime", ".java", new File(System.getProperty("user.dir")));file.deleteOnExit();//获得类名 String classname = getBaseFileName(file);//将代码输出到文件 PrintWriter out = new PrintWriter(new FileOutputStream(file));out.println(getClassCode(code, classname));out.close();//编译生成的java文件 String[] cpargs = new String[] { "-d",System.getProperty("user.dir") + "\\WebRoot\\WEB-INF\\classes",file.getName() };int status = Main.compile(cpargs);if (status != 0) {throw new Exception("语法错误!");}return file;}private static synchronized void run(String code) throws Exception {String classname = getBaseFileName(compile(code));new File(System.getProperty("user.dir")+ "\\WebRoot\\WEB-INF\\classes\" + classname + ".class").deleteOnExit();try {Class cls = Class.forName(classname);Method main = cls.getMethod("method", null);main.invoke(cls, null);} catch (Exception se) {se.printStackTrace();}}private static String getClassCode(String code, String className) {StringBuffer text = new StringBuffer();text.append("public class " + className + "{\n");text.append(" public static void method(){\n");text.append(" " + code + "\n");text.append(" }\n");text.append("}");return text.toString();}private static String getBaseFileName(File file) {String fileName = file.getName();int index = fileName.indexOf(".");String result = "";if (index != -1) {result = fileName.substring(0, index);} else {result = fileName;}return result;}
? int status = Main.compile(cpargs); if (status != 0) { throw new Exception("语法错误!"); } 5 楼 bloodrate 2008-12-16   Main.compile
貌似不在标准的jdk lib里阿 6 楼 timonzhang 2008-12-16          1.6里可以使用JavaCompiler和JavaCompiler.CompilationTask 实现。问题是这些只算做到了动态编译,不算真正意义上的动态运行

热点排行