1700439690
1700439691
JavaCompiler cmp=ToolProvider.getSystemJavaCompiler();
1700439692
1700439693
//Java标准文件管理器
1700439694
1700439695
StandardJavaFileManager fm=cmp.getStandardFileManager(null, null, null);
1700439696
1700439697
//Java文件对象
1700439698
1700439699
JavaFileObject jfo=new StringJavaObject(clsName, sourceStr);
1700439700
1700439701
//编译参数,类似于javac<options>中的options
1700439702
1700439703
List<String>optionsList=new ArrayList<String>();
1700439704
1700439705
//编译文件的存放地方,注意:此处是为Eclipse工具特设的
1700439706
1700439707
optionsList.addAll(Arrays.asList(”-d”,”./bin”));
1700439708
1700439709
//要编译的单元
1700439710
1700439711
List<JavaFileObject>jfos=Arrays.asList(jfo);
1700439712
1700439713
//设置编译环境
1700439714
1700439715
JavaCompiler.CompilationTask task=cmp.getTask(null, fm, null,
1700439716
1700439717
optionsList, null, jfos);
1700439718
1700439719
//编译成功
1700439720
1700439721
if(task.call()){
1700439722
1700439723
//生成对象
1700439724
1700439725
Object obj=Class.forName(clsName).newInstance();
1700439726
1700439727
Class<?extends Object>cls=obj.getClass();
1700439728
1700439729
//调用sayHello方法
1700439730
1700439731
Method m=cls.getMethod(methodName, String.class);
1700439732
1700439733
String str=(String)m.invoke(obj,“Dynamic Compilation”);
1700439734
1700439735
System.out.println(str);
1700439736
1700439737
}
1700439738
1700439739
}
[
上一页 ]
[ :1.70043969e+09 ]
[
下一页 ]