public class helloworld {
public static void main(String[] args) throws IOException {
//通過(guò)字符串動(dòng)態(tài)編譯:將字符串存儲(chǔ)成一個(gè)臨時(shí)文件(io流),然后調(diào)用動(dòng)態(tài)編譯方法
String str="public class Hi {public static void main(String[] args){System.out.println(\"HaHa,sxt!\");}}";
JavaCompiler compiler=ToolProvider.getSystemJavaCompiler(); //得到j(luò)ava的動(dòng)態(tài)編譯器
//如果第一個(gè)參數(shù)為空則使用控制臺(tái)輸入,第二個(gè)為空則使用控制臺(tái)輸出,第三個(gè)為空則使用系統(tǒng)報(bào)錯(cuò)
//第四個(gè)參數(shù)為String類型的可變參數(shù),即相當(dāng)于Sting類型的數(shù)組
int result=compiler.run(null, null, null,"C:\\Users\\10853\\eclipse-workspace\\lala\\src\\cn\\sxt\\in\\helloworld.java");
//返回值為0則表示編譯成功,否則為失敗
System.out.println(result==0?"編譯成功":"編譯失敗");
//通過(guò)Runtime.getRuntime()運(yùn)行編譯好的類
Runtime run=Runtime.getRuntime();
Process process=run.exec("java -cp C:\\Users\\10853\\eclipse-workspace\\lala\\src\\cn\\sxt\\in helloworld");
InputStream in=process.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(in));
String info="";
while((info=reader.readLine())!=null)
{
System.out.println(info);
}
//通過(guò)反射運(yùn)行編譯好的類
try {
URL[] urls = new URL[] {new URL("file:/"+"C:/myjava/")};
URLClassLoader loader = new URLClassLoader(urls);
Class c = loader.loadClass("HelloWorld");
//調(diào)用加載類的main方法
Method m = c.getMethod("main",String[].class);
m.invoke(null, (Object)new String[]{});
//由于可變參數(shù)是JDK5.0之后才有。
//m.invoke(null, (Object)new String[]{});會(huì)編譯成:m.invoke(null,"aa","bb"),就發(fā)生了參數(shù)個(gè)數(shù)不匹配的問題。
//因此,必須要加上(Object)轉(zhuǎn)型,避免這個(gè)問題。
//public static void main(String[] args)
} catch (Exception e) {
e.printStackTrace();
}
}
}
網(wǎng)頁(yè)題目:java動(dòng)態(tài)編譯
當(dāng)前鏈接:
http://weahome.cn/article/jdjsjp.html