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.
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).
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.