Usando imagens e o JAR

8 respostas
M

Eu fiz um aplicativo que calcula a média anual das notas de uma turma na escola, vou dar de presente pra minha garota no Dia dos Namorados, ela é professora. É que a grana tá ruim, e não dá pra dar um notebook a ela!

O aplicativo que eu fiz se chama NotasDaTurma.class.
Meu aplicativo não tem banco de dados, apenas facilita a ela no cálculo das médias bimensais. O aplicativo usa duas imagens. Quando eu fiz o aplicativo colocava tudo em um diretório chamado Programas, mas quando eu faço o JAR, eu uso um diretório Java e seu sub-diretório pacoteJar. O arquivo class fica no pacoteJar, mas quando o arquivo .jar é gerado ele fica no diretório Java. Segui o que aprendi nos tutoriais.

Tá funcionando, ontem eu fiz o JAR e rodou legal.

Quando eu fiz ocódigo no NotasDaTurma.java eu declarei as imagens assim:

ImageIcon img1 = new ImageIcon(“foto1.gif”);

e coloquei a imagem em um JLabel. Tudo perfeito, funciona legal, e as imagens ficavam no mesmo diretório do NotasDaTurma.class, por isso ao compilar e rodar eu via tudo, as notas , as médias calculadas e as imagens. Mas, quando eu criei o JAR, não apareciam nele as imagens. O Rafael Cassolato já me alertou ontem do porque, e eu sou muito agradecido a ele.

O que eu preciso saber agora, é se lá no computador do meu “cliente” (minha garota), o que eu preciso fazer lá?

1 - Vou instalar o kit da SUN
2 - vou configurar as variáveis de ambiente, CLASSPATH, etc
3 - Vou criar um diretório Java na raiz do C:
4 - Vou colocar o arquivo JAR nesse diretório Java
5 - Vou colocar as duas imagens .gif nesse diretório Java
6 - Vou criar um ícone na área de trabalho que abra o JAR

Como sou iniciante não sei se isso vai dar certo? Será que minha garota vai falar: “Você é o máximo?”

Me ajudem aí, gente, tem erro, falta alguma coisa? Tô aprendendo tudo aqui com vocês, sei que todos ensinam certo, mas posso estar fazendo errando nas coisas. É isso aí, falta alguma coisa?

Abraço, amigos,
Marco

8 Respostas

BrunoBastosPJ

Olha lá você precisa baixar só a jre e criar a estrutura de diretórios. No caso do xp com a jre 1.5 você nem precisa configurar o classpath, lá em casa é só clicar no .jar como se fosse um .exe que ele abre. Não sei se funciona em qualquer máquina…

F

Cara, tu nao precisa colocar as imagens fora do jar… pode ser dentro mesmo…
Dentro dos teus pacotes mesmo…

O que costumo fazer eh criar um pacote

images

e colocar as imagens ali dentro,

dai pra carregar elas fica algo assim

URL imageURL = this.getClass().getResource("images/background.gif");
        if (imageURL == null) {
            return null;
        }

        return new ImageIcon(imageURL).getImage();
M

Ao Bruno,
Agradeço a você Bruno, pela ajuda, valeu demais. Mas o que você quer dizer com “criar a estrutura de diretórios” ? Isso é o mesmo que abrir uma pasta para colocar o arquivo JAR e os arquivos de imagens? Ou é outra coisa que eu talvez não saiba? Ajude aí, por favor.

Ao Fabio,
Muito obrigado Fabio por tentar me ajudar, isso aí eu não sabia, mas o Rafael ontem já tinha falado nesse método getClass().getResource(), mas eu não sei usar ele.

Você fala em criar um pacote e colocar as imagens nele, isso deve ser excelente. mas eu não sei fazer um pacote. Como se cria um pacote, é no código-fonte principal? Existe algum tutorial que ensine a criar um pacote?

E esse código seu aí acima, deve ser colocado em que parte do meu NotasDaTurma.java ? Se você puder detalhar um pouco mais me ajudaria muito.

Abraços para vocês,
Marco

BrunoBastosPJ

tipo, como você fez o comando

ImageIcon img1 = new ImageIcon("foto1.gif");

o que importar para a imagem é estar no mesmo diretório que o .jar, então você não precisa criar um diretório com um nome expecífico o ideal seria fazer que nem o fabiofalci falou, botar a imagem dentro do jar, porque ai se caso alguem mover o jar não precisa mover as imagens junto.

F

Assim,

No diretorio onde tu coloca os teus .java (normalmente um diretorio chamado src/)
Tu cria dentro dele um diretorio images… fica assim dai

src/images

Dai tu copia todas as imagens que tu usa no teu programa pra la, quando tu for empacotar para um jar
eles serao copiado para dentro do jar.

Entao, em todos os pontos que tu carrega figuras no teu codigo, tu muda
para aquele algoritmo que te passei! :wink:

M

Fabio,

Agora que eu fui sacar sobre o que você está propondo, e é ótimo fazer isto como você ensinou, mas só tá faltando entender o seguinte, no meu código eu declaro a imagem asssim:

ImageIcon img1 = new ImageIcon(“foto.gif”);

e pelo que estou entendendo, você diz que é para trocar essa instrução por essa abaixo:

URL imageURL = this.getClass().getResource(images/foto.gif);

if (imageURL == null) {

return null;

}
return new ImageIcon(imageURL).getImage();

Mas para isso eu tenho que abrir esse sub-diretório images dentro da pasta onde vai ficar o arquivo JAR. No meu caso, a pasta principal é Java, dentro dessa pasta eu tenho uma pasta pacoteJar que é onde eu coloco os arquivos .class que vão gerar o .jar. Então, pelo que entendi de sua instrução, eu tenho que ter o seguinte caminho:

C:\Java\images

e coloco o arquivo “foto.gif” nessa pasta images. Será que é isso? Vou fazer.

F

Tu esta usando eclipse?

Bom, a tua estrutura do projeto tem que ficar mais ou menos assim

/projeto/
/projeto/src/ Aqui vai o teu codigo fonte
/projeto/src/images Aqui tu copia as tuas imagens

Quando tu for criar o jar, as imagens vao ser copiadas junto para dentro do jar.

Eh isso… Dai tu nao precisa se preocupar em ficar copiando as imagens na mao…

Coloca a estrutura do teu projeto ai pra gente ver… como eu fiz ali.

L

E se eu quisesse fazer isso com arquivos .doc? O que eu teria que alterar? Tentei usar esse código mas não sei pelo que substitui o .getImage().
(eu quero que quando o usuário clique no botão ajuda, abra um .doc)

vlw :wink:

Criado 7 de junho de 2006
Ultima resposta 11 de jun. de 2006
Respostas 8
Participantes 4