[Problema] new File() de arquivo dentro do .jar não funciona!

2 respostas
ricoldi

Boa tarde pessoal,

Gostaria de saber como abro um arquivo que esta dentro do meu arquivo .jar
A arvore do pacote esta assim:

|- META-INF
|- core
      |-Jogo.java
|- imagens
      |-imagem.png
|- sons
      |-som.wav

Quando rodo no Netbeans roda o som e exibe a imagem tranquilamente, mas se rodo o jar usando o ?javaw ?jar? ele abre a imagem mas não roda o som.

Esta assim o código:

Esta é a classe Jogo.java que esta dentro do pacote ?core?

//Supondo que arquivo = "imagens/ imagem.png?
public BufferedImage carregarImagem(String arquivo) throws Exception{
return (ImageIO.read(getClass().getResource("/" + arquivo)));
}

//Supondo que arquivo = "sons/som.wav?
public File carregarArquivo(String arquivo) throws Exception{
return new File (getClass().getResource("/" + arquivo).getPath());
}

Já tentei usar getClass().getClassLoader() e também deu erro.

Se eu faço assim:

public BufferedImage carregarImagem(String arquivo) throws Exception{
return (ImageIO.read(carregarArquivo(arquivo)));
}

public File carregarArquivo(String arquivo) throws Exception{
return new File (getClass().getResource("/" + arquivo).toURI());
}

Nem as imagens abrem quando rodo o jar diretamente.


Eu acho que o problema é que o getResource() me retorna um URL e o FILE não aceita URL. Mas como posso resolver?


Já buscamos aqui e no google mas devemos estar usando as palavras chaves erradas, será que alguém pode nos ajudar?


Agradeço
Ricoldi.

2 Respostas

kicolobo

Tente carregar o recurso como se fosse um stream.

Tente algo como

getClass().getClassLoader().getResourceAsStream("core/imagens/imagem.png");

Se você chamar o método getResource(), ele vai te retornar apenas a URI relacionada.

O objeto retornado, será do tipo URI. O que você poderia fazer, consiste em adaptar a URI para que acesse o conteúdo de um arquivo jar.
Se não me engano (memória é fraca), seria algo como
jar://alguma coisa.

ricoldi

Fala kicolobo, blz?

È eu conheço o getResourceAsStream() mas ele me retorna o Stream do arquivo, só que a classe que vai receber é de terceiro e só recebe File ou String,

Vou ver esse lance da URI e ver se da certo.
Não achei que serviria…

Agradeço a atenção kicolobo.

Att
Ricoldi

Criado 1 de agosto de 2008
Ultima resposta 1 de ago. de 2008
Respostas 2
Participantes 2