本程序出自群里.22069957 之前用到这个功能在网页上动态生成用户写的代码..共享给大家.
import java.io.File;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Arrays;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.tools.DiagnosticCollector;
import javax.tools.JavaCompiler;
import javax.tools.StandardJavaFileManager;
import javax.tools.ToolProvider;


public class demo
{

public demo(String s)
{

try
{

System.getProperties().store(System.out, "");

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
DiagnosticCollector diagnostics = new DiagnosticCollector();
StandardJavaFileManager fileManager = compiler
.getStandardFileManager(diagnostics, null, null);
String fileName = "MyButton.java";

File file = new File(System.getProperty("java.io.tmpdir"), fileName);
PrintWriter pw = new PrintWriter(file);
pw.println(s);
pw.close();

Iterable compilationUnits = fileManager
.getJavaFileObjectsFromStrings(Arrays.asList(file
.getAbsolutePath()));
JavaCompiler.CompilationTask task = compiler.getTask(null,
fileManager, diagnostics, null, null, compilationUnits);
boolean success = task.call();
fileManager.close();
System.out.println((success) ? "编译成功" : "编译失败");
URLClassLoader classLoader = new URLClassLoader(

new URL[]
{ new File(System.getProperty("java.io.tmpdir"))
.toURI().toURL() });
final JButton btn = (JButton) classLoader.loadClass("MyButton")
.newInstance();
btn.setText("按钮");
System.out.println(btn);

SwingUtilities.invokeLater(new Runnable()
{
@Override

public void run()
{
JFrame frame = new JFrame("frame");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(640, 480);
frame.setLocationRelativeTo(null);
frame.getContentPane().add(btn);
frame.setVisible(true);
}
});

} catch (Exception e)
{
e.printStackTrace();
}
}


public static void main(String args[])
{
new demo(
"import javax.swing.JButton; public class MyButton extends JButton {}");
}
}