Reflection fora do jar que está sendo executado

Olá pessoal
Estou enfrentando um problema simples, mas que não dô jeito de resolver.
Dentro do jar “prog.jar” (que está em C:\) tem uma classe chamada “iniciar.class”.
Essa classe é encarregada de fazer várias coisas, inclusive usar Reflection.

Eu preciso usar Reflection para executar um método que está dentro do arquivo “serexecutado.class” (também na pasta C:\, mas fora do jar)
Para representar melhor, vai meu diretório C:\

Arquivos de Programas WINDOWS Usuários prog.jar serexecutado.class
Ou seja, a classe que está dentro do prog.jar tem que usar Reflection para executar o método do serexecutado.class.

É aí que está meu problema: quando eu tento usar Reflection, ele tenta achar a classe “serexecutado.class” dentro do jar (mas como vocês podem ver, ela não está dentro, está fora do jar).

Alguém pode me ajudar a aprimorar o código abaixo para realizar o que pretendo?

try { Class cls = Class.forName("serexecutado"); Method meth = cls.getMethod("metodo"); Object retobj = meth.invoke(cls); String valorRetornado = (String) retobj; System.out.println(valorRetornado); } catch (Throwable e) { System.out.println("Erro no Reflection: " + e); }
OBS: Peço que me perdoem se estiver fazendo uma pergunta besta, encontrei várias maneiras no Google de usar isso dentro do jar e suas pastas, mas nenhuma fora do mesmo.

Obrigado galera!

É porque vc tem que adicionar a sua classe ao classpath antes de usar o Class.forName()

senão ele só vai procurar dentro do seu pacote mesmo

Ou voce pode via Reflection usar o método addUrl do ClassLoader (getClass().getClassLoader()) adicionando o caminho da classe ou de um jar para o ClassLoader.
Após isso o Class.forName deve funcionar.

[quote=Mark_Ameba]Ou voce pode via Reflection usar o método addUrl do ClassLoader (getClass().getClassLoader()) adicionando o caminho da classe ou de um jar para o ClassLoader.
Após isso o Class.forName deve funcionar.[/quote]

Não estou muito acostumado com o javadoc. Procurei, achei o ClassLoader, só que não consegui achar o addURL. Desculpe mas, será que você pode me dar um exemplo?

Obrigado aos dois pela ajuda!

URLClassLoader loader = (URLClassLoader) getClass().getClassLoader();
Method m = loader.getClass().getDeclaredMethod("addUrl",URL.class);
m.setAcessible(true);
m.invoke(new File("C:/").toURI().toURL());
Class<?> clazz = loader.findClass("pack.classe.que.ta.na.URL");

Basicamente isso, addURL é da classe URLClassLoader.
Fiz de cabeça então não garanto que funcione só como está.

[quote=Mark_Ameba] URLClassLoader loader = (URLClassLoader) getClass().getClassLoader(); Method m = loader.getClass().getDeclaredMethod("addUrl",URL.class); m.setAcessible(true); m.invoke(new File("C:/").toURI().toURL()); Class<?> clazz = loader.findClass("pack.classe.que.ta.na.URL");

Basicamente isso, addURL é da classe URLClassLoader.
Fiz de cabeça então não garanto que funcione só como está.[/quote]

Bah kra, ajudo muito. Vlw mesmo. Vô da uma bela pesquisada agora.