Dúvida ClassLoader

0 respostas
S

Pessoal,

Estou tentando usar um ClasseLoader para carregar um class que esta dentro de uma arquivo jar.

Codigo do ClassLoader:
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;
	}
}
Estou fazendo a chamada ao ClassLoader desta forma:
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();
			}
		}

	}

}
E a classe que estou tentando utilizar q esta dentro do jar é esta:
package teste.teste2;

public class Teste {
	public static void teste(){
		System.out.println("Chamou Teste");
	}
}

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.

Criado 3 de fevereiro de 2009
Respostas 0
Participantes 1