动态编译java程序实例

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

import java.io.*;

import java.lang.reflect.Method;

import com.sun.tools.javac.*;

public class RuntimeCode {

private static Main javac = new Main();

/**等待用戶輸入JavaCode,然後編譯、執行*/

public static void main(String[] args) throws Exception {

String code = "";

DataInputStream bd = new DataInputStream(System.in);

byte[] brray= new byte[200];

int i = bd.read(brray);

code = new String(brray,0,i);

run(compile(code));

System.out.print(code);

}

/**編譯JavaCode,返回暫存檔案物件*/

private synchronized static File compile(String code) throws Exception {

File file;

//在用戶當前文件目錄創建一個臨時代碼文件

file = File.createTempFile("JavaRuntime", ".java", new File(System.getProperty("user.dir")));

System.out.println(System.getProperty("user.dir"));

//當虛擬機退出時,刪除此臨時java原始檔案

//file.deleteOnExit();

//獲得檔案名和類名字

String filename = file.getName();

String classname = getClassName(filename);

//將代碼輸出到文件

PrintWriter out = new PrintWriter(new FileOutputStream(file));

// out.println("/**");

out.write("class "+classname+"{"+"public static void main(String[] args)"+"{");

out.write(code);

out.write("}}");

//關閉文件流

out.flush();

out.close();

String[] args = new String[] { "-d", System.getProperty("user.dir"),filename };

//返回編譯的狀態代碼

int status = javac.compile(args);

System.out.println(status);

return file;

}

//運行程序

private static synchronized void run(File file) throws Exception {

String filename = file.getName();

String classname = getClassName(filename);

//當虛擬機退出時,刪除此臨時編譯的類文件

new File(file.getParent(),classname + ".class").deleteOnExit();

try {

Class cls = Class.forName(classname);

//映射main方法

Method main = cls.getMethod("main", new Class[] { String[].class });

//執行main方法

main.invoke(null, new Object[] { new String[0] });

} catch (SecurityException se) {

}

}

private static void debug(String msg) {

System.err.println(msg);

}

private static String getClassName(String filename) {

return filename.substring(0, filename.length() - 5);

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有