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());
}
}
相关推荐
本篇将深入探讨如何在C#中使用`PropertyGrid`动态加载自定义属性,以实现更灵活的数据展示和编辑功能。 首先,我们要理解`PropertyGrid`的基本用法。`PropertyGrid`控件通过反射机制自动发现并显示对象的所有公共...
要实现动态加载自定义模板列,首先我们需要创建一个继承自`DataGridViewTextBoxColumn`或其他基础列类型的类,并重写或扩展其属性和方法。例如,我们可以创建一个名为`DataGridViewCustomTextBoxColumn`的类,其中...
通过自定义UITypeEditor,我们可以为控件、类或其他类型的属性创建定制的编辑界面,使得在设计时能够以更加直观和高效的方式设置属性值。本篇将深入探讨如何利用C#实现自定义属性编辑器,并结合UserControl和...
在这个场景下,我们讨论的是如何在树结构组件中实现`loadtree`的延迟加载,并通过自定义事件处理用户交互,如右键点击或子节点操作。 延迟加载,或称为按需加载,是当用户滚动到特定区域或触发特定操作时才加载数据...
7. **性能优化**:对于大型或复杂的文本编辑控件,开发者需要关注性能,减少不必要的服务器往返,提高页面加载速度。 8. **插件和扩展**:为了增强功能,自定义控件可能需要支持插件机制,允许其他开发者添加额外的...
vb.net 自定义控件 自定义属性 UITypeEditor UI 类型编辑器 ...注意一个问题:设计模式与生成dll文件加载显示结果不同,这就是为什么会在设计模式时运行显示灰色,不能跳出自定义对话框,只有在生成文件加载才显示。
在自定义的类中,需要实现`IDataGridViewEditingControl`接口中定义的所有方法和属性。这些方法和属性包括但不限于: - `EditingControlDataGridView`: 返回当前正在编辑的DataGridView实例。 - `...
DLL动态加载是程序运行时按需加载DLL文件的技术,而非在程序启动时预先加载。这种方式有助于减少内存占用,提高程序启动速度,并允许在运行时更新或替换DLL而无需重新编译主应用程序。在C# WinForm应用中,我们可以...
10. **自定义扩展**:如果你需要更复杂的功能,如过滤、排序或编辑表格数据,可以考虑使用Bootstrap的扩展库,如Datatables或Handsontable,它们提供了丰富的API和配置选项。 综上所述,动态加载Bootstrap表格数据...
在实际项目中,可以根据具体需求进一步扩展,如添加搜索功能,支持动态加载数据等。提供的"Android EditSpinner"文件可能包含了完成这些功能的示例代码,可以作为学习和参考的资源。在研究这些代码时,务必理解其...
在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)框架中自定义编辑框(Edit Box)和按钮(Button)控件,特别是在加载透明背景资源图片以及实现鼠标交互效果方面。MFC是C++的一个类库,它为...
8. **编辑器和小部件**:Eclipse插件可以创建自定义的文本编辑器或图形化编辑器,如XML编辑器或图形流程设计器。编辑器通常是视图的一部分,用于处理特定类型的文件。 9. **命令和快捷键**:通过定义命令,插件可以...
本知识点主要聚焦于如何创建一个图文编辑框以及实现菊花样式(即环形进度条)的自定义Progressbar。下面将详细讲解这两个核心内容。 首先,我们来看富文本编辑框。在Android系统中,标准的EditText控件虽然可以接受...
在Unity3D游戏开发中,动态加载文本数据是一项常见的需求,尤其在实现玩家自定义功能、NPC交互等场景中,需要从外部数据文件获取信息。本文主要探讨如何在Unity中有效地读取和处理文本数据。 首先,对于Unity项目中...
QT自定义标题栏文本编辑器是一种利用Qt5框架开发的C++应用程序,它允许开发者对窗口的标题栏进行个性化定制,同时提供基本的文本编辑功能。这个应用的独特之处在于,它可以将文本信息直接存储到图片中,这在某些特定...
综上所述,本项目结合KindEditor的富文本编辑功能和后台的动态生成、发送邮件能力,实现了自定义邮件模板的功能。这涉及到前端界面设计、HTML和字符串处理、SMTP邮件发送以及安全性和性能优化等多个方面的技术知识。
对于大型数据集,ZTree支持异步加载,通过设置`setting.data.async`参数,可以实现在用户展开节点时动态加载子节点,提高页面响应速度。`setting.data.async.url`定义请求数据的URL,`setting.data.async....
自定义预加载器可以让开发者自由设计加载界面的外观和交互,例如改变颜色、形状或动画效果,使得加载过程更符合品牌风格或者提升用户体验。 在提供的文件列表中,我们可以看到以下几个文件: 1. `Colorwheel ...
本文将深入探讨如何创建一个图文编辑框以及实现菊花样式(也称 loading 动画)的Progressbar,这两个自定义控件。 首先,我们要理解图文编辑框的概念。在Android中,一个图文编辑框通常指的是可以同时展示文本和...
在本主题中,我们将深入探讨如何实现一个自定义编辑框,特别是在编辑框中显示位图的功能。这通常涉及到Windows API编程,特别是MFC(Microsoft Foundation Classes)库或者Qt等跨平台框架的使用。下面我们将详细解析...