Pessoal,
Estou tentando usar um ClasseLoader para carregar um class que esta dentro de uma arquivo jar.
Codigo do ClassLoader:
[code]
package teste;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
public class TesteClassLoader extends ClassLoader {
protected Class findClass(String name) throws ClassNotFoundException {
System.out.println("Procurando classe");
ClassLoader loader;
try {
File arqJar = new File("D:/Teste.jar");
URL[] arq = new URL[1];
arq[0] = arqJar.toURI().toURL();
System.out.println("CARREGADO");
loader = URLClassLoader.newInstance(arq, this.getClass().getClassLoader());
System.out.println("PROCURANDO "+name);
Class c =loader.loadClass(name);
return c;
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
}[/code]
Estou fazendo a chamada ao ClassLoader desta forma:
[code]
package teste;
import teste.teste2.Teste;
public class Main {
public static void main(String[] args){
try{
Teste.teste();
}catch (NoClassDefFoundError e) {
TesteClassLoader c = new TesteClassLoader();
System.out.println(Main.class.getClassLoader());
try {
c.loadClass("teste.teste2.Teste");
System.out.println("Tentando novamente...");
Teste.teste();
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
}
}
}[/code]
E a classe que estou tentando utilizar q esta dentro do jar é esta:
[code]
package teste.teste2;
public class Teste {
public static void teste(){
System.out.println(“Chamou Teste”);
}
}[/code]
No momento que chamo o classe loader nao ocorre erro.
Mas quando tento usar a classe que carreguei o corre o Erro:
java.lang.ClassNotFoundException: teste.teste2.Teste
Como se a classe nao tivesse sido carregada.
Verifiquei que as classes Teste e TesteClassLoader estao neste classeLoader:
sun.misc.Launcher$AppClassLoader@169e11
e classe Teste esta sendo carregada em outro classeLoader:
java.net.FactoryURLClassLoader@5224ee
Acredito que seja por isso que nao esta dando certo.
Este é oerro que ocorre:
Exception in thread “main” java.lang.NoClassDefFoundError: teste/teste2/Teste
at teste.Main.main(Main.java:16)
como se a classe nao tivesse sido carregada.
Como faço para carregar a classe Teste no mesmo classLoader das outras classes?
Valeu.