[RESOLVIDO] Após gerar .jar não encontra imagens e .html dentro da aplicação

26 respostas
A

Após gerar .jar não encontra mais as imagens e nem os .html que estão dentro da aplicação empacotada…

26 Respostas

pedruhenrik

vc pretende importar o projeto? ou é 1 jar executável?

att,

A

Olá pedruhenrik, em 1° lugar obrigado pela ajuda,

o projeto será executado via prompt de comando…

pedruhenrik

opa,

então andredecotia, faz pouco tempo eu tive 1 problema parecido,

acho q solução envolve algo do tipo:

getResource("/arquivo");  
getResourceAsStream("/arquivo");

eu usei como base esses links:

http://www.guj.com.br/java/38033-acessar-arquivos-txt-dentro-de-um-jar
http://www.guj.com.br/java/30001-acessar-arquivo-de-dentro-de-um-jar
http://www.guj.com.br/java/32880-arquivo-texto-dentro-do-jar
http://www.guj.com.br/java/225019-acessar-arquivo-jpeg-pelo-jar
http://www.guj.com.br/java/184441-tutorial–como-acessar-arquivos-do-seu-jar
http://www.guj.com.br/java/83268-arquivo-dentro-de-jar
http://www.guj.com.br/java/145541-leitura-e-execucao-de-arquivo-dentro-do-jar

o caso q eu tive foi esse:

http://www.guj.com.br/java/229139-duvidas-ao-setar-propriedades-systemsetproperty–conesao-ssl#1175572

mas infelizmente tive q deixar os arquivos necessários fora do jar.

boa sorte!

att,

A

Já estou lendo todos os posts recomendados… Espero que eu não tenho de deixar os arquivos fora da app igual a você…

Até logo…
AS

pedruhenrik

o meu app utilizava certificado digital e de “dentro” do jar eu não consegui estabelecer a conexão ssl…infelizmente né! heheh

boa sorte ai!

se der dps posta o resultado.

att,

J

Para ler arquivos dentro do .jar você pode usar uma InputStream:

InputStream IMAGEM_INICIO = getClass().getResourceAsStream("/br/com/sistema/imagens/inicio.png");

ou

Image imagem = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/br/com/sistema/imagens/inicio.png"));
A

Gente, estou tentando ainda, mas fala que a imagem não pode ser encontrada, dei um print da tela, por favor veja o anexo…

A forma que está sendo usada é:

/** * Método que processa e devolve o caminho para acessar o arquivo Saraiva.gif * @return String o caminho para Saraiva.gif * */ private String caminhoDoArquivoSaraivaGif(){ return Class.class.getResource("/br/com/editorasaraiva/geracaoepubdemo/model/Saraiva.gif").getPath(); }


A

De fato este é que deveria ser o caminho para acessar os arquivos?

C:\GeracaoEpubDemoV1-01.jar\br\com\editorasaraiva\geracaoepubdemo\model

[b]c:[/b] Porque é onde o .jar se encontra
GeracaoEpubDemoV1-01.jar Porque é o nome do projeto
\br\com\editorasaraiva\geracaoepubdemo Porque é pacote onde os arquivos se encontram

Caroline_Alow

aqui nois usamos getRource…

A

Pois é, mas não está funcionando ainda… :smiley: :shock:

A

\br\com\editorasaraiva\geracaoepubdemo\model\Saraiva.gif Testei assim e também não funfou…

J

andredecotia:
Gente, estou tentando ainda, mas fala que a imagem não pode ser encontrada, dei um print da tela, por favor veja o anexo…

A forma que está sendo usada é:

/** * Método que processa e devolve o caminho para acessar o arquivo Saraiva.gif * @return String o caminho para Saraiva.gif * */ private String caminhoDoArquivoSaraivaGif(){ return Class.class.getResource("/br/com/editorasaraiva/geracaoepubdemo/model/Saraiva.gif").getPath(); }


Porque não declara a String com o caminho do pacote logo ao invés de obter uma resource pra depois retornar o mesmo caminho?

Não ví nenhuma InputStream, já tentou utilizá-la como postei acima?

A

Alguém já usou solução com BufferedInputStream?

J

http://www.javadb.com/read-from-file-with-bufferedinputstream

A

Estou fazendo uns testes, a aplicação abaixo funciona perfeitamente, porém após empacotar, gerar o .jar, ela não consegue mais localizar o arquivo, a foto...

i
mport java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;

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

	public static void substituiArquivo() {
		FileChannel sourceChannel = null;
		FileChannel destinationChannel = null;
		try {
			sourceChannel = new FileInputStream("Foto1.jpg").getChannel();
			destinationChannel = new FileOutputStream("c:\Foto1_copiado.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();
				}
		}
	}
}
A

Bom dia,
fiz novas modificações e continua não funcionando:

package principal;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
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");  
			
			//String path = getClass().getResource("Foto1.jpg").getFile();
			
			//URL url = getClass().getResource("/imagem/Foto1.jpg");


			sourceChannel = new FileInputStream("/imagem/Foto1.jpg").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();
				}
		}
	}
}
J
Tenta fazer assim para copiar os arquivos de dentro do .jar:
public void copiaArquivo(){
        try {
            FileChannel arquivo_entrada = new FileInputStream(new File(getClass().getResource("/com/jns/util/swing/rsrc/icons/date.png").getFile())).getChannel();
            FileChannel arquivo_saida = new FileOutputStream("C:/arquivo_teste.png").getChannel();
            
            arquivo_entrada.transferTo(0, arquivo_entrada.size(), arquivo_saida);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
A

Oi joyle, como vai?
Cara seguí suas instruções mas continua não encontrando, só que desta vez não encontra nem via Eclipse, quero dizer, quando uso esse esquema de por dentro do pacote não encontra nem no Eclipse, vide código dois prints da minha tela:

package principal;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;

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

	public void copiaArquivo(){  
	    try {  
	        FileChannel arquivo_entrada = new FileInputStream(new File(getClass().getResource("/principal/Foto1.jpg").getFile())).getChannel();  
	        FileChannel arquivo_saida = new FileOutputStream("C:/arquivo_teste.jpg").getChannel();  
	          
	        arquivo_entrada.transferTo(0, arquivo_entrada.size(), arquivo_saida);  
	    } catch (Exception e) {  
	        e.printStackTrace();  
	    }  
	}  
}


A

Agora funcionou o mesmo código isso porque coloquei o projeto na raíz, na unidade c:. Mas de qualquer maneira, só funciona no Eclipse, ao gerar o .jar
back to zero, volta a questão de não encontrar os mesmos.

A

// Para essa linha funcionar tem que esta na raíz este projeto por exemplo unidade C:\ FileChannel arquivo_entrada = new FileInputStream(new File(getClass().getResource("/principal/Foto1.jpg").getFile())).getChannel();

J

andredecotia:
Agora funcionou o mesmo código isso porque coloquei o projeto na raíz, na unidade c:. Mas de qualquer maneira, só funciona no Eclipse, ao gerar o .jar
back to zero, volta a questão de não encontrar os mesmos.

É verdade, tenta dessa outra maneira aqui então:

public void copiaArquivo(){
        try {
            InputStream file = getClass().getResourceAsStream("/com/jns/util/swing/rsrc/icons/date.png");
            File outPutFile = new File("C:/arquivo.png");
            OutputStream out = new FileOutputStream(outPutFile);
            
            byte[] buf = new byte[1024];
            int size;
            
            while ((size=file.read(buf)) > 0)
                out.write(buf,0,size);
            
            out.close();
            file.close();
            
            System.out.println("Arquivo copiado...");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Aqui consegui copiar o arquivo de dentro do .jar! :smiley:

A

Opa…
Opa…
Parece que foi… Deixa eu testar com mais calma… :smiley:

J

Dentro de src crie uma pasta images e pegue a imagem com new ImageIcon(getClass().getResource("/images/imagem.png")

Obs: Para o java pegar a imagem dentro do .jar é Case Sensitive.

A

Funcionou…
Galera obrigado pela ajuda e atenção…

joyle, cara, vc é dez! seu método é tiro e queda!

Abraço,

A
J

andredecotia:
Funcionou…
Galera obrigado pela ajuda e atenção…

joyle, cara, vc é dez! seu método é tiro e queda!

Abraço,


Mérito de : http://www.roseindia.net/java/java-conversion/InputstreamToFile.shtml
Só adaptei o código! :wink:

Criado 27 de janeiro de 2011
Ultima resposta 28 de jan. de 2011
Respostas 26
Participantes 5