Compilando e Executando arquivo .java em Runtime

5 respostas
hmichel

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

[]ś

5 Respostas

ricardolecheta

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();
		}
	}
}
ricardolecheta

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[]{});
cv1

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

hmichel

: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:

Bani

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.

Criado 7 de julho de 2003
Ultima resposta 8 de jul. de 2003
Respostas 5
Participantes 4