动态编译java程序实例
来源:互联网 发布:上海兄弟连php培训 编辑:程序博客网 时间:2024/05/19 14:02
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);
}
}
- 动态编译java程序实例
- 动态编译JAVA程序
- 动态编译Java程序
- 动态编译JAVA程序
- 动态编译JAVA程序
- 动态编译JAVA程序
- 动态编译、运行JAVA程序
- 动态编译,运行java程序
- Java之动态编译,静态编译简单理解和实例
- 动态编译实例
- 使用JDK1.6编译器API动态编译java源代码实例
- JAVA下进行动态编译加载的实例
- 运用Ant编译Java程序的一个小实例
- 应用Java程序动态创建ODBC数据源的实例
- 动态编译JAVA程序(com.sun.tool.javac)
- 动态编译JAVA程序(com.sun.tool.javac)
- java 内存编译-动态编译
- java动态代理实例
- 步行深圳游记
- 麻省理工网上开放课程!
- 如何用VB写安全控件(从MSDN引用)
- IT职业指南:技术人员如何转入其他行业
- 卡耐基人际关系学2
- 动态编译java程序实例
- 卡耐基人际关系学3
- IIS 错误代码大汇总
- 动态调用方法实例
- Blog其实挺无聊的!
- 利用XSLT把ADO记录集转换成XML
- 卡耐基人际关系学4
- 卡耐基人际关系学5
- 卡耐基人际关系学6