Erro ao carregar classe pelo nome com ClassLoader

0 respostas
TerraSkilll

Bom dia.

Eis um problema que estou tendo com o uso de ClassLoader, ao carregar uma classe (não um jar, um .class mesmo) que está numa pasta fora do projeto. Quando chamo o método, getClass().getClassLoader().getResourceAsStream(nome), ele me retorna null, o que gera erro de NullPointerException no stream.available(); em seguida.

private byte[] loadClassData(String nome) throws IOException, ClassNotFoundException {
          // o procedimento abaixo retorna null para o stream
	    InputStream stream = getClass().getClassLoader().getResourceAsStream(nome);

	    // o erro ocorre aqui: NullPointerException
	    int size = stream.available();

	    byte buff[] = new byte[size];
    
	    DataInputStream in = new DataInputStream(stream);

	    in.readFully(buff);

	    in.close();

	    return buff;
	}

Este código está dentro de uma classe "MyClassLoader", que estende ClassLoader. O valor da variável nome é ".\\algoritmos\TesteAlgo.class". Tentei diversas outras combinações, como colocar o caminho completo ("C:\\programa\\algoritmos\\TesteAlgo.class"), inverter as barras e etc. Quando coloco o arquivo dentro do projeto, não ocorre erro, mas não é isso que desejo, já que diversos algoritmos devem ser adicionados pelo usuário sem ser necessário recompilar o sistema.

A configuração das pastas está assim:

c:\programa\meuprograma.jar
c:\programa\algoritmos\TesteAlgo.class

Pelo que pesquisei, ao trabalhar com ClassLoader dessa forma eu preciso em alguns casos mudar o classpath (seja na mão, seja via código), para que o getClass() possa enxergar a pasta algoritmos, já que ela não faz parte do .jar do programa. Se sim, como eu poderia fazer isso?

Agradeço a atenção. Abraços.

Criado 28 de abril de 2011
Respostas 0
Participantes 1