Problema em Executar um arquivo .class em tempo real

Ola salve, comunidade, bem eu to com um problema que eu não sei mais o que faço.
tenho que executar um arquivo, que o usuario manda…
ex.

1 - Usuario manda um arquivo .java
2 - o Servlet compila (Ate aqui ta ok)
3 - O Servlet executa o .class (Aqui é o Problema)


// aqui recebe o arquivo .java e compila (Funcionou OK) 
String t[] = {"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 
String d = LOCAL_UPLOAD+ arquivo.substring(0,arquivo.length()-5);
String m[] = {"java ", d};
Runtime.getRuntime().exec(m);

Obs. nesse String d = … na verdade ele pega o arquivo exemplo, Codigo.class e diminui para apenas Codigo

Por favor alguem me ajude

è para o meu TCC…

muito obrigado

Marcus Paulo

mas tem certeza q ele nao lança nenhum erro ? olhou nos logs do teu servidor ?

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.

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

Olha o mel na chupeta, amigo:

[code]import java.lang.reflect.*;

public class Test {
private static final String className = "RunMe";

public static void main( String[] args ) {
	try {
		// aqui recebe o arquivo .java e compila (Funcionou OK)
		String t[] = { "javac", "a/"+className+".java" };
		Runtime.getRuntime().exec( t );

		Class cls = Class.forName("a."+className);
		Object o = cls.newInstance();
		Method meth = cls.getMethod("execute", null);
		meth.invoke(o, null);
	} catch( Exception e ) {
		e.printStackTrace();
	}
}

}[/code]

[code]package a;

public class RunMe {
public void execute() {
System.out.println("Estou executando!");
}
}[/code]

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

Esse negocio de exec pra compilar é furada, limita demais o tratamento de erros que vc pode ter, use o javac do tools mesmo … um bom comeco: http://www.javaworld.com/javatips/jw-javatip131.html

e pra executar use a ideia do artigo acima … vc vai poder tratar as Exceptions do codigo alheio …