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.
[code]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;
}[/code]
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.