• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    動態編譯java程序實例

    發布: 2008-7-01 16:33 | 作者: 網絡轉載 | 來源: 本站原創 | 查看: 114次 | 進入軟件測試論壇討論

    領測軟件測試網
    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);
    }
    }

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: java JAVA Java 編譯 程序 動態 實例


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>