Estou com um problema em uma aplicação Swing onde uso o Jasper para a geração dos relatórios PDF. No NetBeans tudo funciona perfeitamente, mas quando gero o Jar e tento executá-lo, a aplicação não encontra o arquivo jasper para a geração do relatório. Alguém já enfrentou este problema? O diretório com os arquivos do jasper está na raiz dos pacotes da aplicação. Alguma sugestão?
Voce empacotou os arquivos do jasper (.jasper) junto com o seu JAR?
Pelo menos se voce tem um projeto com os arquivos jasper dentro dele voce pode chamar por caminho relativo. Exemplo;
Projeto
src
br.com.portaljava.relatorios (todos os seus arquivos jasper)
chamando um arquivo
String pagina = "./src/br/com/portaljava/relatorios/nome_da_pagina.jasper"
//.... executa pelo viewer
J
jcfreirePJ
Olá Carlos,
Obrigado pela ajuda. O erro continua. Ao executar o Jar eu obtenho:
Tentei como vc disse .\src\br\com
santacasa\relatorios\FichaAtendimento.jasper e diversas combinações mas não dá certo.
Abri o Jar e o jasper está empacotado no diretório listado…
O código exato que estou usando é:
Stringrelatorio="/br/com/santacasa/relatorios/FichaAtendimento";try{//JanelapatavisualizaçãodoPDFJDialogviewer=newJDialog(new javax.swing.JFrame(),"Visualização do Relatório",true);viewer.setSize(800,600);viewer.setLocationRelativeTo(null);JasperReportrelatoriosJasper=(JasperReport) JRLoader.loadObject(relatorio + ".jasper");JasperPrintjasperPrint=JasperFillManager.fillReport(relatoriosJasper, parameters, new JREmptyDataSource());JasperViewerjrViewer=newJasperViewer(jasperPrint, true);viewer.getContentPane().add(jrViewer.getContentPane());viewer.setVisible(true);} catch (JRException jre) {jre.printStackTrace();} catch (Exception ex) {ex.getMessage();}
Alguma outra idéia?
Obrigado,
celso
Olá!
Algum amigo uma vez passou por um problema parecido… resolvemos passando um classloader diferente em algum ponto…
mas o classloader que utilizamos foi o
Thread.currentThread().getContextClassLoader()
acho que utilizamos o classloader para dar um load no stream do arquivo do jasper… e passava o stream para o engine do jasper…
da uma olhada ae…
abraços
C
carlosjrcabeloPJ
Ola Dennys, veja a configuração dos caminhos do seu projeto, as vezes voce tem que ficar tentando um monte de vezes até descobrir a causa real do seu problema, mas empacotei uma aplicação de teste aqui num arquivo JAR e funcionou corretamente.
String relatorio = "./src/br/com/santacasa/relatorios/FichaAtendimento.jasper";
// ou FichaAtendimento é um diretorio ou arquivo jasper?
J
jcfreirePJ
Olá Carlos,
Obrigado pela ajuda. O erro continua. Ao executar o Jar eu obtenho:
Ola Dennys, veja a configuração dos caminhos do seu projeto, as vezes voce tem que ficar tentando um monte de vezes até descobrir a causa real do seu problema, mas empacotei uma aplicação de teste aqui num arquivo JAR e funcionou corretamente.
String relatorio = "./src/br/com/santacasa/relatorios/FichaAtendimento.jasper";
// ou FichaAtendimento é um diretorio ou arquivo jasper?
FichaAtendimento.jasper é o nome do arquivo jasper. Já tentei diferentes possibilidades e nada. Qdo o NetBeans gera o jar o existe o diretório \br\com\santacasa\relatorios com o arquivo FichaAtendimento.jasper dentro dele, mas quando eu tento executar dá o erro que eu transcrevi...
O MANIFEST do jar é:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.5
Created-By: 1.6.0_03-b05 (Sun Microsystems Inc.)
Main-Class: br.com.santacasa.janelas.AtendimentoPS
Class-Path: lib/substance.jar lib/toplink-essentials.jar lib/toplink-e
ssentials-agent.jar lib/commons-logging-1.1.jar lib/jasperreports-1.3
.4.jar lib/commons-collections-3.2.jar lib/itext-1.3.1.jar lib/postgr
esql-8.1-405.jdbc3.jar
X-COMMENT: Main-Class will be added automatically by build
Alguma idéia?
celso
PS: perdão pelos múltiplos posts semelhantes, mas no meu navegador estava travando e não aparecia que estava enviando, ai cliquei diversas vezes...
J
jcfreirePJ
Olá Pessoal,
Tentei diversas combinações de diretório e embora algumas funcionem no Netbeans quando eu gero o jar e o executo tenho o erro novamente. Seguindo a sugestão do Dennys, alterei o código para:
Novamente dentro do NetBeans funciona perfeitamente, mas quando eu executo o Jar, quando ele tenta criar o InputStream tenho o erro:
Ljava.lang.StackTraceElement;@13e846f.
Já postei uma mensagem no Forum do JasperReport mas até agora não recebi nenhuma resposta…
Obrigado pela ajuda,
celso
D
DennysPJ
“jcfreire”:
Olá Pessoal,
Tentei diversas combinações de diretório e embora algumas funcionem no Netbeans quando eu gero o jar e o executo tenho o erro novamente. Seguindo a sugestão do Dennys, alterei o código para:
Novamente dentro do NetBeans funciona perfeitamente, mas quando eu executo o Jar, quando ele tenta criar o InputStream tenho o erro:
Ljava.lang.StackTraceElement;@13e846f.
Já postei uma mensagem no Forum do JasperReport mas até agora não recebi nenhuma resposta…
Obrigado pela ajuda,
celso
Olá…
Coloca a exception completa para facilitar a compreensão do erro.
Stringrelatorio="/br/com/santacasa/relatorios/FichaAtendimento.jasper";try{log.info("Entrou no try");//JanelapatavisualizaçãodoPDFJDialogviewer=newJDialog(new javax.swing.JFrame(),"Visualização do Relatório",true);viewer.setSize(800,600);viewer.setLocationRelativeTo(null);//AtendimentoPSéonomedaclasse.InputStreamisJasper=AtendimentoPS.class.getResourceAsStream(relatorio);JasperReportrelatoriosJasper=(JasperReport) JRLoader.loadObject( isJasper );JasperPrintjasperPrint=JasperFillManager.fillReport(relatoriosJasper, parameters, new JREmptyDataSource());JasperViewerjrViewer=newJasperViewer(jasperPrint, true);viewer.getContentPane().add(jrViewer.getContentPane());viewer.setVisible(true);} catch (JRException jre) {log.error(jre.getMessage());} catch (Exception ex) {log.error(ex.getMessage());}
Obrigado pela ajuda, mas porque será que com a solução do Dennys não funcionou?
celso
Lembrei… tive que pegar o classloader de uma forma diferente pois estavamos utilizando Spring e dava problema ClassLoader… na hierarquia dos ClassLoader’s…
Sem Spring basta acessar o classloader da forma que você usou…