Imagem não aparece no JAR

6 respostas
B

Fiz um programa no Eclipse que usa imagens, quando executo ele pelo eclipse as imagens aparecem normalmente. Mandei gerar um .jar desse programa e já abri com o winRAR e as imagens estão presentes no .jar, mas ao executar o programa através desse mesmo jar as imagens não parecem.

um exemplo de uma das imagens:

smileButton = new JButton(new ImageIcon("smilePadrao.jpg"));

Vale lembrar q quando executo dentro do eclipse as imagens aparecem normalmente! =((

OBS: As imagens estão na raiz do projeto.

6 Respostas

Y

Cara, não sei exatamente o que pode ser, mas tenta o seguinte:

Põe uma barra antes do nome do arquivo, exemplo:

new ImageIcon("/smilePadrao.jpg")

Ou, outra idéia que foi como eu uso numa aplicação minha e funciona perfeitamente, é colocar dentro de algum pasta as imagens. Exemplo: dentro de uma pasta chamada images que fica na raíz do projeto, desse modo:

new ImageIcon("images/smilePadrao.jpg")
B

Putz kra… ja tnha tentado as duas sugestões q vc falou e também n resolveram =((((

Mas obrigado de qualquer forma

V

Se for para trabalhar com imagens, use o java para acha-las para você. Primeiramente, coloque sua imagem em qualquer lugar de seu class path (geralmente dentro de algum pacote, ou vc cria um pacote img). Depois, use o comando:

A vantagem é que depois as imagens podem ser inseridas dentro do jar.
Só tome cuidado, pois o comando, inclusive o nome dos pacotes e da imagem, são case sensitive. Se você ferir essa regra, as imagens funcionarão fora do jar (no windows), mas não dentro do jar ou no Linux.

Do jeito que você fez, só funcionará com imagens fora do jar.

R

Tive o mesmo problema com as imagens, fiz o que o amigo disse só que aparece um erro no getClass()

Cannot make a static reference to the non-static method getClass() from the type Object…

criei um pacote “nome.imagens” e coloquei as imagens dentro dele… e chamei assim…

Não sei como resolver isso, se alguem puder me ajudar… mto obrigado !

A

Alguma dica para este código:

package principal;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

import javax.swing.ImageIcon;

public class Principal {
	public static void main(String[] args) {
		new Principal().substituiArquivo();
	}

	public void substituiArquivo() {
		FileChannel sourceChannel = null;
		FileChannel destinationChannel = null;
		try {
			new ImageIcon(getClass().getResource("/imagem/Foto1.jpg")).getImage();  
			//String path = getClass().getResource("Foto1.jpg").getFile();
			sourceChannel = new FileInputStream(new ImageIcon(getClass().getResource("/imagem/Foto1.jpg")).toString()).getChannel();
			destinationChannel = new FileOutputStream("c:\\Foto1_copiado1.jpg").getChannel();
			sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
		} catch (FileNotFoundException f) {
			System.err.println("O arquivo não foi encontrado! Erro: " + f.getMessage());
		} catch (Exception e) {
		} finally {
			if (sourceChannel != null)
				try {
					sourceChannel.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			if (destinationChannel != null)
				try {
					destinationChannel.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
} }
R
tb ja enfrentei este problema e resolvi por tudo no c, e esquecer o problema... no momento. agora tentei a dica... e funcionou na primeira imagem, ao acrescentar mais... obtenho erros...
run:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at javax.swing.ImageIcon.<init>(ImageIcon.java:167)
        at forca_por_raghy.Forca_1.<init>(Forca_1.java:76)
        at forca_por_raghy.Forca_1$10.run(Forca_1.java:1176)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:642)
        at java.awt.EventQueue.access$000(EventQueue.java:85)
        at java.awt.EventQueue$1.run(EventQueue.java:603)
        at java.awt.EventQueue$1.run(EventQueue.java:601)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:612)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

é realmente complicadinho isto... mas... enfim... ????

ate aqui dá...
ImageIcon f0 = new ImageIcon(getClass().getResource("/forca_por_raghy/forcadesenho0.gif"));

    ImageIcon f1 = new ImageIcon(getClass().getResource("/forca_por_raghy/forcadesenho1.gif"));
    ImageIcon f2 = new ImageIcon(getClass().getResource("/forca_por_raghy/forcadesenho2.gif"));
    ImageIcon f3 = new ImageIcon("C:/IMAGENS/forcadesenho3.gif");
    ImageIcon f4 = new ImageIcon("C:/IMAGENS/forcadesenho4.gif");
    ImageIcon f5 = new ImageIcon("C:/IMAGENS/forcadesenho5.gif");

se ponho isto para o f3, ja da o erro acima... ???????????????????

precisa do rar, pois tem uma lib necessaria ao jar. look. helps?
jar, rar, muito grande, nao da de enviar... aumenta isso aí, moderador, nao pode?

valeu.

Criado 15 de abril de 2007
Ultima resposta 24 de abr. de 2011
Respostas 6
Participantes 6