Mudar classpath em tempo de execução

Galera é o seguinte, estou fazendo uma aplicação e tenho que adicionar classes ou jars em tempo de execução. Li na última edição da JavaMagazine como fazer isso, só que não está dando certo.

Vejam só:

System.out.println("Classpath Antes: "+System.getProperty("java.class.path")); System.setProperty("java.class.path",System.getProperty("java.class.path")+";Z:\\Teste\\GerenciaMail.jar"); System.out.println("Classpath Depois: "+System.getProperty("java.class.path")); Class cls = Class.forName("mailManager.Correio");

Adicionei o GerenciaMail.jar no classpath e tentei criar um objeto do tipo Class usando o Class.forName(“mailManager.Correio”);

O que apareceu no console foi o seguinte:

[color=“red”]Classpath Antes: Z:\Projetos\pro_tcc\classes;Z:\Projetos\pro_tcc\lib\visuallib.jar;Z:\Projetos\pro_tcc\lib\JLink.jar

Classpath Depois: Z:\Projetos\pro_tcc\classes;Z:\Projetos\pro_tcc\lib\visuallib.jar;Z:\Projetos\pro_tcc\lib\JLink.jar;Z:\Teste\GerenciaMail.jar
java.lang.ClassNotFoundException: mailManager.Correio
at java.net.URLClassLoader$1.run(URLClassLoader.java:199)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:187)
at java.lang.ClassLoader.loadClass(ClassLoader.java:289)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274)
at java.lang.ClassLoader.loadClass(ClassLoader.java:235)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:141)
at frb.tcc.teste.gui.Teste.main(Teste.java:2
Exception in thread “main” [/color]

O que eu tenho que fazer para poder “enxergar” essa classe?
Tem alguma relação com ClassLoader (não entendo bem)?

Grato desde já

vc realmente precisa inseri-lo em tempo de execução!? Q mal há em adicioná-lo ao classpath antes de iniciar a execução!?

Preciso sim.
O que eu estou fazendo é uma ferramenta que faz engenharia reversa de um código Java para a geração da modelagem dinâmica. Isto é o meu projeto de fim de curso em Ciência da Computação.
Nela o usuário deve selecionar um arquivo (.jar) e daí eu tenho que adicioná-lo no classpath para poder trabalhar com ele.

Valeu

Vc poderia fazer com que a sua aplicação inicial solicitasse todas as configurações necessárias e a partir destes dados recebidos essa aplicação inicial chamaria a aplicação secundária com o CLASSPATH montado e esta faria a engenharia reversa nos .jar informados!

Funciona de modo semelhante nas IDEs quando vc roda a sua aplicação de dentro da IDE, ou seja, o programa inicial é a IDE, onde vc configura as bibliotecas que a sua aplicação vai usar, então a IDE forma o CLASSPATH e roda a tua aplicação (secundária). Entendeu?!

Só criando o seu próprio classloader