java动态编译运行代码
2011-02-16 23:54
501 查看
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
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;
public class CompilerTest {
public static void main(String[] args) throws Exception {
String CLASSNAME = "TestClass";
String source = "public class " + CLASSNAME +" { public static void main(String[] args) {System.out.println(/"Hello World!/");} }";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
JavaSourceFromString sourceObject = new JavaSourceFromString(CLASSNAME,source);
Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);
CompilationTask task = compiler.getTask(null, fileManager, null, null,null, fileObjects);
boolean result = task.call();
if (result) {
System.out.println("编译成功。");
Runtime r = Runtime.getRuntime();
Process p = r.exec("java " + CLASSNAME);
BufferedReader br = new BufferedReader(new InputStreamReader(p
.getInputStream()));
StringBuffer sb = new StringBuffer();
String inline;
while (null != (inline = br.readLine())) {
sb.append(inline).append("/n");
}
System.out.println(sb.toString());
}
}
}
class JavaSourceFromString extends SimpleJavaFileObject {
final String code;
JavaSourceFromString(String name, String code) {
super(URI.create("string:///" + name.replace('.', '/')+ Kind.SOURCE.extension), Kind.SOURCE);
this.code = code;
}
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return code;
}
}
import java.io.InputStreamReader;
import java.net.URI;
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;
public class CompilerTest {
public static void main(String[] args) throws Exception {
String CLASSNAME = "TestClass";
String source = "public class " + CLASSNAME +" { public static void main(String[] args) {System.out.println(/"Hello World!/");} }";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
JavaSourceFromString sourceObject = new JavaSourceFromString(CLASSNAME,source);
Iterable<? extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);
CompilationTask task = compiler.getTask(null, fileManager, null, null,null, fileObjects);
boolean result = task.call();
if (result) {
System.out.println("编译成功。");
Runtime r = Runtime.getRuntime();
Process p = r.exec("java " + CLASSNAME);
BufferedReader br = new BufferedReader(new InputStreamReader(p
.getInputStream()));
StringBuffer sb = new StringBuffer();
String inline;
while (null != (inline = br.readLine())) {
sb.append(inline).append("/n");
}
System.out.println(sb.toString());
}
}
}
class JavaSourceFromString extends SimpleJavaFileObject {
final String code;
JavaSourceFromString(String name, String code) {
super(URI.create("string:///" + name.replace('.', '/')+ Kind.SOURCE.extension), Kind.SOURCE);
this.code = code;
}
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
return code;
}
}
相关文章推荐
- 在EditPlus里配置编译和运行java代码的方法
- 利用javax.tools动态编译执行java代码
- sublime text 3 编译运行java代码方法
- 关于用命令行 文本 进行java代码的编辑 编译 运行 应注意的地方
- Windows下,sublim text 3 编译及运行Java代码配置
- 在自己的java代码中编译并运行程序
- EditPlus编译和运行java代码
- java 动态编译与用Rhino引擎执行javascript代码
- java之编译时类型(前期绑定)和运行时类型 (后期绑定、动态绑定、运行时绑定)
- java 动态编译.java文件,然后动态加载运行
- java代码的动态编译问题
- Java动态运行编译好的类两种方法
- 比较编译技术--Java 代码的静态编译和动态编译中的问题
- 在命令行模式下如何编译运行Java代码
- Java学习之动态编译-动态脚本引擎-脚本引擎执行javascript代码
- Eclipse中对java代码的编译环境和运行环境的设置
- windows环境下的.bat文件 快速运行编译用text写的java代码
- Java代码的静态编译和动态编译中的问题比较
- EditPlus编译运行Java代码
- JDK8在Java转让Javascript脚本引擎动态地定义和运行代码