网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.签名一个使用插件1.3版的Java小程.
.Eclipse 插件EclipseShell&.
.Java 虚拟机类装载:原理、实现与.
.调整JavaTMI/O性能.
.现有一些ORM工具的弊端.
.Sun. XVR-1200 图形加速器的使用.
.Servlet开发初步.
.轻松架起Java连接COM对象的桥梁.
.XSLT轻松入门第一章:XSLT概念.
.Java Robot对象实现服务器屏幕远.
.tomcat的sqlserver数据源的配置.
.为Struts的测试辩护!.
.学习javabean.
.在Eclipse中利用XMLBuddy开发XML.
.SUN认证课程专业问答.
.SpringMultiAction的简单示例.
.用Validator检查你的表单.
.Files 属性.
.优化JDBC性能的三大技巧.
.EJB轻松进阶之七.

动态编译java程序实例

发表日期:2008-1-5



  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);
上一篇:Hibernate的事务和并发 人气:1442
下一篇:反汇编器-javap.exe 人气:994
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐