Bom dia pessoal, tenho algumas linhas de código para gerar um relatório a partir de um jButton, o problema é que se o meu caminho arquivo .jasper for relativo ele não funciona, assim :
try {
conex.conexao();
conex.executaSql(sql);
JRResultSetDataSource realResul = new JRResultSetDataSource(conex.rs);
JasperPrint jpPrint = JasperFillManager.fillReport("relatorios/teste1.jasper", new HashMap(),realResul);
JasperViewer jv = new JasperViewer(jpPrint);
jv.setVisible(true);
conex.desconecta();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "erro ao preencher relatorios\n\n" +e);
}
porém se eu coloco um caminho absoluto “C:/Users/Meu Pc/Desktop/PB/src/relatorios/teste1.jasper” funciona normalmente. Alguém sabe o que pode estar ocorrendo ?
Testa com o que o darlan disse e com o código abaixo acrescentando ‘/’ no início do caminho passado como parâmetro. getClass().getResourceAsStream("/relatorios/test1.jasper");
ou NomeDaClasse.class.getResourceAsStream("/relatorios/test1.jasper");
Dessa forma o user.dir vai encontrar onde .jar esta e dali em diante você poderia entrar em alguma pasta
caminho = System.getProperty(“user.dir”) + “”\\relatorios\\teste1.jasper";
@AntonioSantos e @darlan_machado obrigado pelas respostas, mas não funcionou em nenhuma possibilidade. Será que o fato de eu ter movido a pasta do projeto para a área de trabalho pode influenciar em algo?
Tem certeza que o nome está correto do relatório?
E você consegue visualizar o arquivo do relatório pelo Package Explorer da IDE? Tenta dar um Refresh no projeto, selecionando e pressionando F5 ou clica com o direito e refresh, e tenta rodar novamente.
Obrigado a todos pela ajuda. Consegui resolver alterando a linha do caminho para a seguinte :
JasperPrint jpPrint = JasperFillManager.fillReport(“src/relatorios/teste1.jasper”, new HashMap(),realResul);
Porém cheguei a um outro problema, como eu uso o java web start, após subir os arquivos atualizados para meu servidor ftp, o usuário que executa o launcher não consegue gerar os relatórios por causa do arquivos teste1.jasper (diz que não foi encontrado ), por que isso está ocorrendo ?
Como já foi dito, quando você usa o getResourceAsStream, a String tem que começar com “/” para procurar a partir da raíz do classpath de sua aplicação.
Se o método retorna null, então o recurso não está no caminho correto ou não foi empacotado no JAR ou ZIP.
@AntonioSantos sim testei, porém sem sucesso. Agora pela manhã apaguei o trecho de código e adaptei o modelo do @rodriguesabner de acordo com minha necessidade e funcionou perfeitamente. Achei um tanto estranho, visto que tentei essas 4 possibilidades ontem :