package test;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Arrays;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import javax.tools.SimpleJavaFileObject;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;
import javax.tools.JavaCompiler.CompilationTask;
import javax.tools.JavaFileObject.Kind;
public class JavaToolsTest {
public static void executeMain(String name, String content){
Class<?> claszz = compile(name,content);
try {
Method method = claszz.getMethod("main", String[].class);
System.out.println(method.getName());
method.invoke(null, new Object[] { new String[] {} });
} catch (Exception e) {
e.printStackTrace();
}
}
private final static Class<?> compile(String name, String content) {
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
StrSrcJavaObject srcObject = new StrSrcJavaObject(name, content);
Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(srcObject);
String flag = "-d";
String outDir = "";
try {
File classPath = new File(Thread.currentThread().getContextClassLoader().getResource("").toURI());
outDir = classPath.getAbsolutePath() + File.separator;
} catch (URISyntaxException e1) {
e1.printStackTrace();
}
Iterable<String> options = Arrays.asList(flag, outDir);
CompilationTask task = compiler.getTask(null, fileManager, null, options, null, fileObjects);
boolean result = task.call();
if (result == true) {
System.out.println("Compile it successfully.");
try {
return Class.forName(name);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return null;
}
private static class StrSrcJavaObject extends SimpleJavaFileObject {
private String content;
public StrSrcJavaObject(String name, String content) {
super(URI.create("string:///" + name.replace('.', '/') + Kind.SOURCE.extension), Kind.SOURCE);
this.content = content;
}
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return content;
}
}
public static void main(String[] args) throws Exception{
StringBuffer sb = new StringBuffer();
sb.append("package test;");
sb.append("public class Test2{");
sb.append(" public static void main(String[] args){");
sb.append(" System.out.println(\"ok.\");");
sb.append(" }");
sb.append("}");
executeMain("test.Test2", sb.toString());
}
}
相关推荐
leaflet 加载百度自定义地图,支持自定义百度地图样式
自定义属性集合编辑器,支持两种方式(UserControl, Component)进行属性编辑并自动产生持久化代码。代码参考网络。
vb.net 自定义控件 自定义属性 UITypeEditor UI 类型编辑器 ...注意一个问题:设计模式与生成dll文件加载显示结果不同,这就是为什么会在设计模式时运行显示灰色,不能跳出自定义对话框,只有在生成文件加载才显示。
实现编辑框,和按钮可以加载透明背景资源图片, 实现当鼠标Hover,leave,click时按钮显示不同的背景效果,等等功能
Android实现自定义listview上拉刷新下拉加载以及侧滑编辑、删除。 实在是缺分啊,没分的童鞋也不用慌,联系我,我给你们代码
需求: vue-cli项目树形控件:一级节点为本地节点,默认展开一级节点,增删改后局部刷新数据。 增加节点,点击确定后局部刷新,渲染新数据。 源码 element组件样式 <... class="treeitems" ... @node-click="handle
fiddler中文版,可自定义规则
android 自定义 ListView,糅合了 滑动删除,上拉刷新,下拉加载更多,长按编辑,点击事件 的功能组件。
取消苹果原生编辑状态,自定义编辑状态,全选,单选的实现,左右tableview加载同界面
delphi XE10实现自定义字体,在窗口上或者任意控件上实现自带的字体显示效果,对注重程序效果的人来说是很实用的例子。
在自定义View时,我们通常会去重写onDraw()方法来绘制View的显示内容。如果该View还需要使用wrap_content属性,那么还必须重写onMeasure()方法。另外,通过自定义attrs属性,还可以设置新的属性配置值。
自定义资源编辑器 DATET.exe 为资源编辑软件,可对资源文件进行编辑。 使用方法: 将 Photograph resource.dll,LOADing.dll,GET_RESX.dll,formdll.dll,Simplicit.Net.Lzo.dll,lzo.dll全部拷贝到软件根目录,在...
这个资源主要用于展示应用程序或游戏的加载过程。无论是在应用程序初始化时加载资源,还是在进行网络请求、文件...在桌面应用程序中,这些加载图标可以用于显示文件处理、数据库读取、图像编辑或其他各种数据加载过程。
用于加载程序模块,以执行您的自定义过程。 它可以作为您的自定义加载程序。 默认情况下,骨骼加载器仅输出输入内容。 当您指定一个函数时,skeleton-loader用输入的内容执行您的函数,并输出其结果。 该功能可以...
使用自定义渲染管线时,应扩展“MaterialMapper”类。 支持 FBX、OBJ、GLTF2、STL、PLY、3MF、DAE* 和 ZIP 文件 跨平台:Windows、Mac、Linux、UWP、Android、WebGL 和 iOS 从文件系统、Web 或任何自定义源导入...
要加载插件,请配置ckeditor(例如,编辑文件ckeditor.js ),如下所示:导入插件import CustomElementPlugin from 'ckeditor5-custom-element/src/customelement';导入工具栏图标(可选) import Icon1 from 'path...
5、通过自定义控制码控制驱动。 6、强大的I/O Buffer编辑处理功能。 7、支持文件拖甩。 8、自带HEX编辑器,灵活方便,功能强大。 多语版进度: 语种 主界面 DDK控制 WDM控制 关于 其它 English 98% 100% 95% 100% ...
这是一个结合曲线绘制,皮肤加载,自定义static于一体的程度,可以用于图像处理软件中的曲线调整,只你学习控件,换肤,MFC一个具有参考价值的代码!
此程序主要是把MFC皮肤资源的加载方式改成从res\QcSkin\文件夹中加载。用户只要编辑好res\QcSkin\里面的文件后,更新一些界面就能看到效果了。以后有机会可以再扩展自定义皮肤的格式,即res\QcSkin\Style.xml
Unity3d可编辑字典Dictionary脚本 ... 解决方案: - 为MonoBehaviour创建自定义编辑器,利用字典 - 序列化字典中包含的数据以便能够修改和保存 - 允许通过编辑器编辑字典,就像编辑列表一样,但保留Dictionary类的优点