Compilando e Executando arquivo .java em Runtime

Ai galera, já foi postado este tópico semana passada, mas pra dar uma renovada na página principal do GUJ, ai vai.
Também estou precisando, EM RUNTIME, quando o usuário digitar o código java, eu consiga compilar e depois executar.
OBJETIVO:
Criar um projeto de Folha de Pagamento para estudos, e ali poder cadastrar novas fórmulas, sem precisar do suporte técnico da empresa, por exemplo, podendo customizar as fórmulas como necessário.

Grato pela atencao

[]ś

vc pode fazer isto assim:

import java.io.FileOutputStream;
import java.io.PrintWriter;

public class Teste
{
	public static void main(String[] args)
	{
		try
		{
			PrintWriter out = new PrintWriter(new FileOutputStream("d:/tmp/teste.txt"));
			out.write("Teste");
			out.close();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}
public class ReflectionTeste
{
	public static void main(String[] args)
	{
		try
		{
			Runtime.getRuntime().exec("javac Teste.java");
			Class c = Class.forName("Teste");
			Teste t = (Teste)c.newInstance();
			t.main(new String[]{});
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}

se existir um metodo específico que queira invocar pode fazer assim;

Runtime.getRuntime().exec("javac Teste.java");
Class c = Class.forName("Teste");
Method m = c.getMethod("nome_do_metodo",new Class[]{});
			
Teste t = (Teste)c.newInstance();
m.invoke(t,new Object[]{});

Por que não usar uma linguagem interpretada, em cima do Java, então? É muito mais fácil e seguro do que tentar espetar um .class recém-compilado na VM (ou re-carregar um .class, que dá uma trabalheira fenomenal).

Dê uma olhada no BSF (Bean Scripting Framework) da Jakarta, e no BeanShell (www.beanshell.org).

:smiley: Muito obrigado galera, vou dar uma estudada melhor em tudo isto e também no compilador java, nao utilizando o Runtime.exec, mas sim a classe do pacote tools.jar. Mas acredito que uma linguagem interpretada sera a melhor opcao para este meu projeto.

[]'s :lol:

Para o Java 1.5 está previsto umas extensões ao NIO que vão trabalhar neste aspecto de compilação em tempo de execução.
Mais detalhes na JSR 199.