Imagem com Swing

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.