// aqui recebe o arquivo .java e compila (Funcionou OK) Stringt[]={"javac",LOCAL_UPLOAD+arquivo};Runtime.getRuntime().exec(t);// Aqui o arquivo .class era para ser executado, porem não da erro aparente, mas não executa Stringd=LOCAL_UPLOAD+arquivo.substring(0,arquivo.length()-5);Stringm[]={"java ",d};Runtime.getRuntime().exec(m);
Obs. nesse String d = … na verdade ele pega o arquivo exemplo, Codigo.class e diminui para apenas Codigo
mas tem certeza q ele nao lança nenhum erro ? olhou nos logs do teu servidor ?
T
thingol
Se você quer simplesmente executar um .class e se você conseguir jogar o resultado de sua compilação no CLASSPATH do seu web container (o programa que executa os servlets, ex. Tomcat), use algo como Class cls = Class.forName(“Codigo”); e chame o método “main” por reflection (algo como java.lang.reflect.Method m = cls.getMethod(“main”, new Class[]{(String[]).class}); m.invoke (null, new Object[]{new String[]{“arg1”, “arg2”, “arg3”}};
onde “arg1”, “arg2”, “arg3” são os argumentos para o método main.
obviamente você deve testar o que escrevi, mas a idéia é essa.
aborges
Para compilar seu .java, analise a hipotese de se utilizar o “tools.jar”, uma ferramenta que vem no j2sdk. Com ele vc podera tratar tb os erros de compilacao, caso seja postado um arquivo com algum problema
danieldestro
Olha o mel na chupeta, amigo:
importjava.lang.reflect.*;publicclassTest{privatestaticfinalStringclassName="RunMe";publicstaticvoidmain(String[]args){try{// aqui recebe o arquivo .java e compila (Funcionou OK)Stringt[]={"javac","a/"+className+".java"};Runtime.getRuntime().exec(t);Classcls=Class.forName("a."+className);Objecto=cls.newInstance();Methodmeth=cls.getMethod("execute",null);meth.invoke(o,null);}catch(Exceptione){e.printStackTrace();}}}
Porém tem um problema. A primeira vez que você roda o programa, ele não executa a classe. Creio que tem algo a ver com o Classloading da classe gerada em runtime.
Dá uma estudada sobre classloading e classloader.
Abraços