java - 如何接受和执行任意Java代码

64 2

许多网站允许用户输入Java代码,并且运行它。程序如何接受外部/在运行时编写的Java,并且运行它?

就像在线编码站点一样,我想返回运行输出(或编译失败)。

一个例子:

  • 网页上显示“以下代码有错误,请尝试解决,”文本框中包含代码。
  • 用户修改代码并按提交,
  • 该网页要么返回编译错误消息,要么返回成功。

时间: 原作者:

102 4

你可以创建一个api来提交表单并使用javac从UI编译代码并使用java运行它。

原作者:
75 1

下面是一个使用Java编译器接口的小例子


import java.io.File;


import java.lang.reflect.Method;


import java.net.URL;


import java.net.URLClassLoader;


import javax.tools.JavaCompiler;


import javax.tools.ToolProvider;



public class Compiler {



 public static void main(String[] args) throws Exception {


 // compile the java file


 JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();


 int result = compiler.run(null, null, null,"D:developmentsnippetsTest.java");


 System.out.println("compiler result" + result);



 // load the new class


 File classesDir = new File("D:developmentsnippets");


 URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { classesDir.toURI().toURL() });


 Class<?> cls = Class.forName("Test", true, classLoader);



 // invoke a method of the class via reflection


 Object instance = cls.getDeclaredConstructors()[0].newInstance();


 Method testMethod = cls.getMethod("test");


 String testMethodResult = (String) testMethod.invoke(instance);


 System.out.println(testMethodResult);


 }


}



这里是测试类


public class Test {


 public String test() {


 return"String from test.";


 }


}



运行Compiler类返回


compiler result 0


String from test.



原作者:
...