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