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);JRResultSetDataSourcerealResul=newJRResultSetDataSource(conex.rs);JasperPrintjpPrint=JasperFillManager.fillReport("relatorios/teste1.jasper",newHashMap(),realResul);JasperViewerjv=newJasperViewer(jpPrint);jv.setVisible(true);conex.desconecta();}catch(Exceptione){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");
Jhonatan_Moreira
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";
capelari1337
@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?
Jhonatan_Moreira
sempre usa 2 > \\
A
AntonioSantos
System.getProperty("file.separator") resolve essa questão.
D
Daniel95
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.
darlan_machado
Olha só, posta o print com a estrutura de pastas do projeto que fica mais fácil.
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 ?
rodriguesabner
O link que enviei fala sobre isso.
staroski2 likes
Seu .jasper está dentro da pasta relatórios, então é só fazer:
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 :