Java

本类阅读TOP10

·使用MyEclipse开发Struts框架的Hello World!(录像1)
·hibernate配置笔记
·AOP编程入门--Java篇
·linux下Tomcat 5.0.20 与 Apache 2 安装/集成/配置
·在win2003下整合了整合Tomcat5.5+ apache_2.0.53+ mod_jk_2.0.47.dll
·构建Linux下IDE环境--Eclipse篇
·Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台)
·ASP、JSP、PHP 三种技术比较
·Tomcat5.5.9的安装配置
·AWT GUI 设计笔记(二)

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
动态编译java程序实例

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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);
    }
}

 




相关文章

相关软件