Pessoal, hoje ao inves de vir com um problema, vou tentar ajudar aqueles que pelam pra conseguir ler uma imagem dentro do pacote que está em um JAR.
Hoje pesquisei muito sobre o assunto até chegar a solução e como vi inumeros posts aqui no forum falando do mesmo assunto, todos com os mesmos problemas, segue aí um pequeno código pra tentar ajudar.
[code]/**
*
-
@author Rodrigo
*/
public class ImageLoader {public BufferedImage imageLoader(String imgString) {
/*
O uso de thread se da deivo a rotina não saber qual qual thread estará rodando este código
então se o classloader que carregou esta classe for diferente do classeloader que está rodando a thread
ele não vai encontrar a imagem mesmo ela estando lá
*/
ClassLoader ccl = Thread.currentThread().getContextClassLoader();BufferedImage imagem = null; try { URL imgUrl = ccl.getResource(imgString); if (imgUrl == null) { throw new IllegalArgumentException("imgString='" + imgString + "' is not a valid image!"); } imagem = ImageIO.read(imgUrl); } catch (IOException ex) { System.out.println(ex.getMessage()); } return imagem;
}
public static Image toImage(BufferedImage bufferedImage) {
return Toolkit.getDefaultToolkit().createImage(bufferedImage.getSource());
}public ImageIcon toImageIcon(BufferedImage img) {
ImageIcon icon = new ImageIcon(img.getScaledInstance(img.getWidth(), img.getHeight(), 10000));
return icon;
}
}[/code]
Local onde será usado a imagem
String imgString = "imagem/imagem.png";
BufferedImage imagem = new ImageLoader().imageLoader(imgString);
Setando a imagem no componente
public void paintComponent(Graphics graphics) {
layoutCasa = graphics;
/*
* super.paintComponent(g); - chamando construtor do JPanel, swing lhe ajuda a desenhar a tela
*/
super.paintComponent(graphics);
Graphics2D graphics2D = (Graphics2D) graphics.create();
graphics2D.drawImage(getImagem(), 0, 0, this.getWidth(), this.getHeight(), this);
}
Espero que este tópico seja útil.