Criando um código em Java, compilando e executando dinamicamente
Veja nesta dica como gerar um código Java, fazer a compilação e depois rodar em tempo de execução.
Criando um código em Java, compilando e executando dinamicamente
Veja nesta dica como gerar um código Java, fazer a compilação e depois rodar em tempo de execução.
<B><SPAN >import </SPAN></B><SPAN >java.io.*;</SPAN><B><SPAN >import </SPAN></B><SPAN >java.util.*;</SPAN><B><SPAN >import </SPAN></B><SPAN >java.lang.reflect.*;</SPAN><B><SPAN >public class </SPAN></B><SPAN >MakeTodayClass {</SPAN><SPAN > </SPAN><SPAN >Date today = </SPAN><B><SPAN >new </SPAN></B><SPAN >Date();</SPAN><SPAN > </SPAN><SPAN >String todayMillis = Long.toString(today.getTime());</SPAN><SPAN > </SPAN><SPAN >String todayClass = </SPAN><SPAN >"z_" </SPAN><SPAN >+ todayMillis;</SPAN><SPAN > </SPAN><SPAN >String todaySource = todayClass + </SPAN><SPAN >".java"</SPAN><SPAN >;</SPAN><SPAN > </SPAN><SPAN > </SPAN><B><SPAN >public static void </SPAN></B><SPAN >main (String args[]){</SPAN><SPAN >MakeTodayClass mtc = </SPAN><B><SPAN >new </SPAN></B><SPAN >MakeTodayClass();</SPAN><SPAN >mtc.createIt();</SPAN><B><SPAN >if </SPAN></B><SPAN >(mtc.compileIt()) {</SPAN><SPAN >System.out.println(</SPAN><SPAN >"Executando " </SPAN><SPAN >+ mtc.todayClass + </SPAN><SPAN >":\n\n"</SPAN><SPAN >);</SPAN><SPAN >mtc.runIt();</SPAN><SPAN >}</SPAN><B><SPAN >else</SPAN></B><SPAN >System.out.println(mtc.todaySource + </SPAN><SPAN >" é ruim."</SPAN><SPAN >);</SPAN><SPAN >}</SPAN><SPAN > </SPAN><B><SPAN >public void </SPAN></B><SPAN >createIt() {</SPAN><B><SPAN >try </SPAN></B><SPAN >{</SPAN><SPAN >FileWriter aWriter = </SPAN><B><SPAN >new </SPAN></B><SPAN >FileWriter(todaySource, </SPAN><B><SPAN >true</SPAN></B><SPAN >);</SPAN><SPAN >aWriter.write(</SPAN><SPAN >"public class "</SPAN><SPAN >+ todayClass + </SPAN><SPAN >"{"</SPAN><SPAN >);</SPAN><SPAN >aWriter.write(</SPAN><SPAN >" public void doit() {"</SPAN><SPAN >);</SPAN><SPAN >aWriter.write(</SPAN><SPAN >" System.out.println(\""</SPAN><SPAN >+todayMillis+</SPAN><SPAN >"\");"</SPAN><SPAN >);</SPAN><SPAN >aWriter.write(</SPAN><SPAN >" }}\n"</SPAN><SPAN >);</SPAN><SPAN >aWriter.flush(); </SPAN><SPAN >aWriter.close();</SPAN><SPAN >}</SPAN><B><SPAN >catch</SPAN></B><SPAN >(Exception e){</SPAN><SPAN >e.printStackTrace();</SPAN><SPAN >}</SPAN><SPAN >}</SPAN><SPAN > </SPAN><SPAN > </SPAN><B><SPAN >public boolean </SPAN></B><SPAN >compileIt() {</SPAN><SPAN >String [] source = { </SPAN><B><SPAN >new </SPAN></B><SPAN >String(todaySource)};</SPAN><SPAN >ByteArrayOutputStream baos= </SPAN><B><SPAN >new </SPAN></B><SPAN >ByteArrayOutputStream();</SPAN><B><SPAN >new </SPAN></B><SPAN >sun.tools.javac.Main(baos,source[</SPAN><SPAN >0</SPAN><SPAN >]).compile(source);</SPAN><SPAN >// se você usa JDK >= 1.3 então use</SPAN><SPAN >// public static int com.sun.tools.javac.Main.compile(source); </SPAN><B><SPAN >return </SPAN></B><SPAN >(baos.toString().indexOf(</SPAN><SPAN >"erro"</SPAN><SPAN >)==-</SPAN><SPAN >1</SPAN><SPAN >);</SPAN><SPAN >}</SPAN><SPAN > </SPAN><B><SPAN >public void </SPAN></B><SPAN >runIt() {</SPAN><B><SPAN >try </SPAN></B><SPAN >{</SPAN><SPAN >Class params[] = {};</SPAN><SPAN >Object paramsObj[] = {};</SPAN><SPAN >Class thisClass = Class.forName(todayClass);</SPAN><SPAN >Object iClass = thisClass.newInstance();</SPAN><SPAN >Method thisMethod = thisClass.getDeclaredMethod(</SPAN><SPAN >"doit"</SPAN><SPAN >, params);</SPAN><SPAN >thisMethod.invoke(iClass, paramsObj);</SPAN><SPAN >}</SPAN><B><SPAN >catch </SPAN></B><SPAN >(Exception e) {</SPAN><SPAN >e.printStackTrace();</SPAN><SPAN >}</SPAN><SPAN >}</SPAN><SPAN > </SPAN><SPAN >}</SPAN>
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo