Pergunta

Ao executar um aplicativo Java a partir do eclipse do meu ImageIcon mostra-se muito bem.

Mas depois de criar um jar o caminho para a imagem, obviamente, fica asneira.

Existe uma maneira de extrair uma imagem do frasco, em tempo de execução para que eu possa abri-lo?Ou, será que há uma maneira melhor de fazer isso?

Eu gostaria de distribuir um único arquivo jar, se possível.

Foi útil?

Solução

Para criar um ImageIcon a partir de um arquivo de imagem dentro de uma mesma frascos seu código é carregado:

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))

Class.getResource retorna uma URL de um recurso (ou null!). ImageIcon tem um construtores que carregar a partir de um URL.

Para criar um URL para um recurso em um frasco não no "classpath", consulte a documentação para java.net.JarURLConnection.

Outras dicas

Você pode tentar algo como:

InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");

Em seu arquivo JAR, você pode ter uma estrutura de diretório:

MyJAR.jar
- com (arquivos de classe em aqui)
- imagens
----image.jpg

Esse é um trabalho para mim, para carregar e configurar o conteúdo do painel de imagem de plano de fundo:

jar (ou build path) contém:

 - com
 - img
 ---- bg.png

java contém:

JFrame f = new JFrame("Testing load resource from jar");
try {
    BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
    f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
    e.printStackTrace();
}

Testado e a funcionar em ambos os jar e unjarred (que é o termo técnico) de execução.

BTW getClass().getClassLoader().getResourceAsStream("/img/bg.png") - o que eu tentei primeiro me devolveu um valor nulo InputStream.

No netbeans 8.1 o que eu tenho feito é incluir a pasta de ícones e outras imagens chamado Recursos dentro do src pasta em que o arquivo de projeto.Assim, sempre que eu construir Jar arquivo a pasta está incluída existe.A árvore do arquivo deve ser semelhante a este:

  • src (arquivos Java na origem packges está aqui)
  • ** PACOTE CHAMADO NO PROJETO**

    • file.java
  • Recursos

    • image.jpg

O código deve ser assim:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));

Carregar imagem do arquivo Jar durante o tempo de execução é o mesmo que o carregamento de imagem quando executado a partir de IDE e.g netbeans a diferença é que ao carregar a imagem a partir de ficheiro JAR o caminho tem de ser correta e a sua sensível a maiúsculas e minúsculas (muito importante).Isso funciona para mim

 image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg"));
        img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH);
        lblhabitat1.setIcon(new ImageIcon(img));

se p "/Pictures/firstgame/habitat1.jpg" é minúscula, isso não vai funcionar.verifique espaços, processos e ortografia

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top