當前位置:編程學習大全網 - 源碼下載 - Javaclassload源代碼

Javaclassload源代碼

參考了網上其他童鞋的例子和介紹,進行了修改:

導入Java . io . io exception;

導入Java . lang . reflect . method;

導入Java . net . uri;

導入Java . net . urisynctaxexception;

導入Java . util . arrays;

導入javax . tools . Java compiler;

導入javax . tools . Java compiler . compilation task;

導入javax . tools . Java file object;

導入javax . tools . simple javafileobject;

導入javax . tools . standard javafilemanager;

導入javax . tools . tool provider;

/**

*動態編譯Java源文件

*

* @作者神獸兒

*

*/

公共類編譯器測試{

公共靜態void main(String[] args)引發異常{

String source = " public class Main { "+" public static void Main(String[]args){ "

+" system . out . println(\ " Hello World!\");"+ "} " + "}";

Java compiler compiler = tool provider . getsystemjavacompiler();

StandardJavaFileManager file manager = compiler . getstandardfilemanager(null,null,null);

StringSourceJavaObject source object = new CompilerTest。StringSourceJavaObject("Main ",

來源);

Iterable & lt?擴展JavaFileObject & gtfile objects = arrays . aslist(source object);

//獲取編譯後的類的根路徑,否則會報錯找不到該類。

string path = class . class . getclass()。getResource("/")。getPath();

Iterable & lt字符串& gtoptions = Arrays.asList("-d ",path);

//添加選項參數

//compilation task task = compiler . get task(null,fileManager,null,null,null,file objects);

compilation task task = compiler . get task(null,fileManager,null,options,null,file objects);

布爾結果= task . call();

如果(結果){

System.out.println("編譯成功。");

class loader loader = compiler test . class . get class loader();

嘗試{

Class & lt?& gtclazz = loader . load class(" Main ");

method method = clazz . get method(" main ",String[]。類);

//修改調用參數,否則會誤報參數個數。

//Object value = method . invoke(null,new Object[]{ });

Object value = method.invoke(null,new Object[]{ new String[]{ } });

System.out.println(值);

} catch(異常e) {

e . printstacktrace();

}

}

}

靜態類StringSourceJavaObject擴展了SimpleJavaFileObject {

私有字符串內容= null

public StringSourceJavaObject(字符串名稱,字符串內容)拋出URISyntaxException {

super(uri . create(" string:///"+name . replace(' . '),'/') + Kind。SOURCE.extension),

善良。來源);

this.content =內容;

}

public char sequence getCharContent(boolean ignore encodingerrors)引發IOException {

返回內容;

}

}

}

  • 上一篇:VB的Listview保存讀取
  • 下一篇:鏈接縮短接口源代碼
  • copyright 2024編程學習大全網