Tenho o seguinte trecho de código que verifica se salvou no banco de dados, caso sim retorna true, e em seguida habilita alguns campos do formulário e seta uma imagem no form com o sinal de positivo(ABERTO), no netbeans ele seta a imagem normalmente mas quando ou gero o .jar e copio a pasta dist para a estação de trabalho do usuário o sistema não consegue encontrar o caminho da imagem de positivo, ele faz todas as operações com o banco etc, mas ele não seta a imagem.
Se eu pegar e copiar a pasta do projeto inteiro pra estação do cliente funciona, mas eu não queria mandar a pasta inteira pois nela tem o código fonte, gostaria de mandar apenas o conteúdo da pasta dist pra estação.
OBS: A mesma coisa acontece quando tento abrir um relatorio.jasper executando o sistema pelo .JAR, ele não encontra o caminho do jasper, cliquei em abrir-com winrar no meu .JAR e todas as pastas estão lá, pasta com os relatórios, a pasta com as imagens.
boolean save = controlEntrada.entradaEPI(mod);
if (save == true) {
cxtId.setText(String.valueOf(controlEntrada.retornaUltimaEntrada(mod)));
habilitaCamposLancamento();
imageStatus.setIcon(new javax.swing.ImageIcon("..\\src\\images\\positivo.png"));
}
O problema é que você está carregando a imagem do sistema de arquivos. Assim quando você muda o seu jar de pasta, ele não consegue encontrar a imagem.
Nesses casos o ideal é que você carregue a imagem como um recurso da aplicação, assim a imagem estará dentro do jar e sempre disponível independente de onde a aplicação rodar.
Bom, pra resumir, você acessa os recursos usando uma classe chamada ClassLoader, pra conseguir um basta usar o Class do objeto que vc está trabalhando. No seu caso, pra conseguir carregar a imagem você mudaria essa linha:
imageStatus.setIcon(new javax.swing.ImageIcon(this.getClass().getClassLoader().getResource("/images/positivo.png")); // por padrão, a pasta "src"é a pasta raiz dos resources
deu o seguinte erro: Erro: net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: file:\C:\Users\informatica01.COOPER\Desktop\SisEPI\build\classes\rel\relEstoque.jasper
Nesse caso não vai funcionar, pq os resources não são acessíveis diretamente pelo caminho do arquivo.
Isso funcionou no ImageIcon pq ela consegue carregar o icone através da URL que é o objeto retornado pelo método getResource. Mas nesse caso é preciso achar na documentação outra forma de carregar o relatório.
Uma opção é usar a função fillReport, que aceita um Stream e não um caminho de arquivo, e carregar o resource como um Stream: