一、应用场景
可以做一个浏览器端编写java代码,上传服务器编译运行 在线评测系统
服务器动态加载某些类文件进行编译.
二、做法
通过runtime调用javac,启动新的进程去操作
Runtime run=Runtime.getRuntime();
Process process=run.exe("java -cp d:/myjava/HelloWorld.java");
通过javaCompiler动态编译
三、具体实现
1、使用Runtime来进行动态编译
Runtime runtime=Runtime.getRuntime();
Process process=runtime.exec("java -cp D:/myjava HelloWorld");
InputStream inputStream=process.getInputStream();
BufferedReader fBufferedInputStream=new BufferedReader(new InputStreamReader(inputStream));
String string="";
while((string=fBufferedInputStream.readLine())!=null)
{
System.out.println(string);
}
实现结果:
Hi
2、通过javaCompiler动态编译
//动态编译
JavaCompiler compiler=ToolProvider.getSystem.JavaCompiler();
int result=compiler.run(null,null,null,source);
System.out.println(reuslt==0?"编译成功":"编译失败");
3、使用ClassLoader配合反射来动态调用方法
URL[] url=new URL[] {new URL("file:/"+"D:/myjava/")};
URLClassLoader urlClassLoader=new URLClassLoader(url);
Class<?>class1=urlClassLoader.loadClass("HelloWorld");
Method method=class1.getDeclaredMethod("main", String[].class);
method.invoke(null, (Object)new String[] {"aa","bb"});